1. 程式人生 > >IOC容器Bean的例項化方式以及其生命週期(上)

IOC容器Bean的例項化方式以及其生命週期(上)

1. 三種例項化Bean的方式
a.使用類構造器例項化(預設無引數)

<bean id=“personService" class="com.baidu..PersonServiceImpl"/>

b.使用靜態工廠方法例項化(簡單工廠模式)

<bean id="personService" 
        class="com.baidu.factory.PersonServiceFactory"    factory-method="createPersonService" />
public class PersonServiceFactory {
      public  static PersonService createPersonService(){
                return new PersonServiceImpl();
      }
}

c.使用例項工廠方法例項化(工廠方法模式):

<bean id=“personServiceFactory" class="com.baidu.factory.PersonServiceFactory"/>
 <bean id="personService" factory-bean=“personServiceFactory" 
                                                                         factory-method="createPersonService" />
public class PersonServiceFactory {
       public  PersonService createPersonService(){
                     return new PersonServiceImpl();
       }
}

Bean的命名 id屬性和name屬性

  1. 一般情況下,裝配一個Bean時,通過指定一個id屬性作為Bean的名稱
  2. id 屬性在IoC容器中必須是唯一的
  3. id 的命名要滿足XML對ID屬性命名規範,必須以字母開始,可以使用字母、數字、連字元、下劃線、句號、冒號
    注意:
    如果Bean的名稱中含有特殊字元,就需要使用name屬性。
    例如:<bean name="#person" class="com.baidu.pojo.Person"/>
    因為name屬性可以相同,所以後出現Bean會覆蓋之前出現的同名的Bean
    Bean的作用域
    在這裡插入圖片描述
    Spring容器中Bean的生命週期
<bean  id=“foo” class=“...Foo”
            init-method=“setup”
            destory-method=“teardown”/>

注意
當bean被載入到容器的時候呼叫setup
當bean從容器中刪除的時候呼叫teardown(scope= singleton有效)

  1. instantiate bean物件例項化
  2. populate properties 封裝屬性
  3. 如果Bean實現BeanNameAware 執行 setBeanName
  4. 如果Bean實現BeanFactoryAware 或者 ApplicationContextAware 設定工廠 setBeanFactory 或者上下文物件 setApplicationContext
  5. 如果存在類實現 BeanPostProcessor(後處理Bean) ,執行postProcessBeforeInitialization
  6. 如果Bean實現InitializingBean 執行 afterPropertiesSet
  7. 呼叫 指定初始化方法 init
  8. 如果存在類實現 BeanPostProcessor(處理Bean) ,執行postProcessAfterInitialization
  9. 執行業務處理
  10. 如果Bean實現 DisposableBean 執行 destroy
  11. 呼叫 指定銷燬方法 customerDestroy