Spring筆記(3)- 裝配Bean的三種方式,Bean 作用域

1 裝配 Bean

  1. 方式(1)
  • beans.xml
<!-- 第一種方式,new 實現類-->
    <bean id="userService" class="com.tzb.service.UserServiceImpl">
        <!--依賴注入,調用 set 方法-->
        <property name="name" value="李四"></property>
    </bean>
 @Test
    public void test(){
        ApplicationContext contex = new ClassPathXmlApplicationContext("beans3.xml");
        IUserService user = (IUserService) contex.getBean("userService");
        user.add();
    }

  1. 方式(2)
  • UserServiceFactory1
package com.tzb.service;

public class UserServiceFactory1 {
    public static IUserService createUserService(){
        return new UserServiceImpl();
    }
}

  • beans.xml
<!--方式二:靜態工廠方法-->
    <bean id="userService2" class="com.tzb.service.UserServiceFactory1" factory-method="createUserService"></bean>

  1. 方式(3)
  • UserServiceFactory2
package com.tzb.service;

public class UserServiceFactory2 {
    public IUserService createUserService() {
        return new UserServiceImpl();
    }
}

-bean.xml

<!--實例工廠方法-->
    <bean id="factory" class="com.tzb.service.UserServiceFactory2"></bean>
    <bean id ="userService" factory-bean="factory" factory-method="createUserService"></bean>

2 Bean 的作用域

  • singleton ,在Spring IoC容器中僅存在一個Bean實例,Bean以單例方式存在,默認值
  • prototype , 每次從容器中調用Bean時,都返回一個新的實例,即每次調用getBean()時 ,相當於執行new XxxBean()
  • request , 每次HTTP請求都會創建一個新的Bean,該作用域僅適用於WebApplicationContext環境
  • session , 同一個HTTP Session 共享一個Bean,不同Session使用不同Bean,僅適用於WebApplicationContext 環境
  • globalSession ,一般用於Portlet應用環境,該作用域僅適用於WebApplicationContext 環境

  • beans.xml
<bean id="userService" class="com.tzb.service.UserServiceImpl" scope="prototype"></bean>

3 Bean 的生命週期

在這裏插入圖片描述

  1. instantiate bean對象實例化
  2. populate properties 封裝屬性
  3. 如果Bean實現BeanNameAware 執行 setBeanName
  4. 如果Bean實現BeanFactoryAware 執行setBeanFactory ,獲取Spring容器
  5. 如果存在類實現 BeanPostProcessor(後處理Bean) ,執行postProcessBeforeInitialization
  6. 如果Bean實現InitializingBean 執行 afterPropertiesSet
  7. 調用 指定初始化方法 init
  8. 如果存在類實現 BeanPostProcessor(處理Bean) ,執行postProcessAfterInitialization
    執行業務處理
  9. 如果Bean實現 DisposableBean 執行 destroy
  10. 調用 指定銷燬方法 customerDestroy
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章