前言
Spring是分層的 Java SE/EE應(yīng)用full- stack輕量級(jí)開源框架祭玉,以IoC(Inversion of Control:反轉(zhuǎn)控制)和AOP( Aspect Oriented Programming:面向切面編程)為內(nèi)核,提供了展現(xiàn)層 Spring MVC和持久層 Spring JDBC以及業(yè)務(wù)層事務(wù)管理等眾多的企業(yè)級(jí)應(yīng)用技術(shù)手销,還能整合開源世界眾多著名的第三方框架和類庫,逐漸成為使用最多的 Java EE企業(yè)應(yīng)用開源框架锣尉。
Spring Bean的初始化
Bean初始化(Initialization)
- @PostConstruct標(biāo)準(zhǔn)方法
public interface UserFactory {
default User createUser(){
return User.createUser();
}
}
public class DefaultUserFactroy implements UserFactory {
//1.基于@PostConstruct注解
@PostConstruct
public void init(){
System.out.println("@PostConstruct: UserFactroy 初始化中蹈胡。耙旦。。找都。");
}
}
@Configuration
public class BeanInitalizationDemo {
public static void main(String[] args) {
//創(chuàng)建BeanFactory容器
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
//注冊Configuration class(配置類)
applicationContext.register(BeanInitalizationDemo.class);
//啟動(dòng)Spring應(yīng)用上下文
applicationContext.refresh();
//依賴查找UserFactory
UserFactory userFactory = applicationContext.getBean(UserFactory.class);
//關(guān)閉Spring應(yīng)用上下文
applicationContext.close();
}
@Bean
public UserFactory userFactory(){
return new DefaultUserFactroy();
}
}
- 實(shí)現(xiàn)InitialingBean接口的afterPropertiesSet()方法
public class DefaultUserFactroy implements UserFactory, InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("InitializingBean#afterPropertiesSet(): UserFactroy 初始化中唇辨。。能耻。赏枚。");
}
}
- 自定義初始化方法
- XML配置:<bean init-method="init" .../>
- Java注解:@Bean(initMethod=“init”)
@Bean(initMethod = "initUserFactory") public UserFactory userFactory(){ return new DefaultUserFactroy(); }
- Java API:AbstractBeanDefinition#setInitMethodName(String)
輸出順序?yàn)椋?/strong>@PostConstruct->InitializingBean->自定義的initUserFactory
Spring Bean的延遲初始化
Bean延遲初始化(Initialization)
非延遲初始化在Spring應(yīng)用上下文啟動(dòng)完成后亡驰,被初始化;延遲初始化在Bean被調(diào)用的時(shí)候饿幅,進(jìn)行初始化隐解;
- XML配置:<bean lazy-init="true" .../>
- Java注解:@Lazy(true)
@Bean(initMethod = "initUserFactory")
@Lazy
public UserFactory userFactory(){
return new DefaultUserFactroy();
}
Spring Bean的銷毀
Bean銷毀(destory())
- @PreDestory標(biāo)注方法
@PreDestroy public void perDestroy(){ System.out.println("@PreDestroy: UserFactroy 銷毀中。诫睬。煞茫。。"); }
- 實(shí)現(xiàn)DisposableBean接口的destory方法
public class DefaultUserFactroy implements UserFactory, DisposableBean { @Override public void destroy() throws Exception { System.out.println("DisposableBean#destroy(): UserFactroy 銷毀中摄凡。续徽。。亲澡。"); } }
- 自定義銷毀方法
- XML配置:<bean destroy="destroy" .../>
- Java注解:@Bean(destroy="destory")
public void doDestroy(){ System.out.println("自定義doDestroy(): UserFactroy 銷毀中钦扭。。床绪。客情。"); } @Bean(initMethod = "initUserFactory",destroyMethod = "doDestroy") public UserFactory userFactory(){ return new DefaultUserFactroy(); }
- Java API: AbstractBeanDefinition#setDestroyMethodName(String)
輸出順序?yàn)椋?/strong>@PreDestory->DisposableBean->自定義的doDestroy
垃圾回收(GC())
- 關(guān)閉spring容器(應(yīng)用上下文)
- 執(zhí)行GC
- Spring Bean覆蓋的finalize()方法 被回調(diào)