1. 程式人生 > >spring類的注入和new簡單理解

spring類的注入和new簡單理解

springboot

    1、main.run方法進入

    2、refreshContext

    3、refresh

    4、finishBeanFactoryInitialization(完成beanFactory的初始化)

    5、preInstantiateSingletons(初始化單例)

    6、getBean(獲取Bean)

    7、doGetBean

    8、createBean

    9、doCreateBean(此方法內部會createBean,建立bean即構造方法執行)

    10、populateBean(進行autowired自動注入)

    11、applyPropertyValues(進行屬性注入)

PS:new物件,不能導致物件依賴的注入屬性自動賦值,只有對物件進行注入,物件依賴的注入屬性才能賦值;

    且注入的屬性不能在建構函式中操作,因為bean沒有建立完成,屬性也沒有注入,此時是為null的

問題:spring預設是單例模式,還有必要建立單例類嗎?

     自己理解:有必要,如果不使用autowired進行自動注入,使用new操作還是可以生成多個物件,

              spring的單例是針對自動注入

例子:

     @Component

     public class CxfClient{

          @Value("${address }")

          private String address;

          private CxfClient(){

               System.out.println(address ); //此時為null.bean沒有載入完成,屬性也沒有載入

          }

          public void createClient(){

               System.out.println(address );//此時為配置檔案中的值

          }

          private static class SingletonHolder {

              private static final CxfClient INSTANCE = new CxfClient();

          }

          public static final CxfClient getInstance() {

               return SingletonHolder.INSTANCE;

          }

     }

 

     public class Test{

          @Autowired

          private CxfClient cxfClient;

          public void testClient(){

               CxfClient.getInstance().createClient();//列印為null.無法注入

               cxfClient.createClient();//列印為配置檔案中的值

          }

     }