1.什么是bean?
Spring Bean是被實例的,組裝的及被Spring 容器管理的Java對象。
Spring 容器會自動完成@bean對象的實例化。
創建應用對象之間的協作關系的行為稱為:裝配(wiring),這就是依賴注入的本質。
2.Bean生命周期幾種方式:
2.1通過@Bean注解指定初始化和銷毀方法
@Bean(initMethod = "init",destroyMethod = "destroy")
@Configuration public class MyLifeCycleConfig { @Scope("prototype") @Bean(initMethod = "init",destroyMethod = "destroy") public Dog dog(){ return new Dog(); } }
applicationContext.close();關閉容器
單實例: 調用close()關閉容器,則會調用銷毀方法
多實例: 調用close()關閉容器,則不會調用銷毀方法
構造(對象創建)
單實例:在容器啟動的時候創建對象
多實例:在每次獲取的時候創建對象
初始化:
對象創建完成,並賦值好,調用初始化方法。。。
銷毀:
單實例:容器關閉的時候銷毀
多實例:容器不會管理這個bean;容器不會調用銷毀方法;
2.2 實現初始化接口InitializingBean 和 銷毀接口DisposableBean
通過讓Bean實現InitializingBean(定義初始化邏輯); DisposableBean(定義銷毀邏輯);
@Component public class Cat implements InitializingBean, DisposableBean { public Cat(){ System.out.println("cat...構造器..."); } public void destroy() throws Exception { System.out.println("cat ....destroy...."); } public void afterPropertiesSet() throws Exception { System.out.println("cat ...afterPropertiesSet...."); } }
2.3 使用JSR250 java中的注解
- @PostConstruct:在bean創建完成並且屬性賦值完成;來執行初始化方法
- @PreDestroy:在容器銷毀bean之前通知我們進行清理工作
@Component public class Tiger { public Tiger(){ System.out.println("tiger...constructor...."); } @PostConstruct public void init(){ System.out.println("tiger....@postConstruct..."); } @PreDestroy public void destroy(){ System.out.println("tiger....@PreDestroy....."); } }
2.4 使用接口 BeanPostProcessor :bean的后置處理器;
接口BeanPostProcessor是 在bean初始化前后進行一些處理工作;
- postProcessBeforeInitialization:在初始化之前工作
- postProcessAfterInitialization:在初始化之后工作
@Component public class MyBeanPostProcessor implements BeanPostProcessor { public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // TODO Auto-generated method stub System.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean); return bean; } public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { // TODO Auto-generated method stub System.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean); return bean; } }
3.小結
1)、指定初始化和銷毀方法;
通過@Bean指定init-method和destroy-method;
2)、通過讓Bean實現InitializingBean(定義初始化邏輯),
DisposableBean(定義銷毀邏輯);
3)、可以使用JSR250;
@PostConstruct:在bean創建完成並且屬性賦值完成;來執行初始化方法
@PreDestroy:在容器銷毀bean之前通知我們進行清理工作
4)、BeanPostProcessor【interface】:bean的后置處理器;
在bean初始化前后進行一些處理工作;
postProcessBeforeInitialization:在初始化之前工作
postProcessAfterInitialization:在初始化之后工作
