- Bean 初始化
- 1.@PostConstruct标注方法
- 2.实现 InitializingBean 接口的 afterPropertiesSet() 方法
- 3.自定义初始化方法
- Bean 延迟初始化
- XML 配置:
- Java 注解:@Bean(initMethod=”init”)
- Java API:AbstractBeanDefinition#setInitMethodName(String)
顺序:@PostConstruct、afterPropertiesSet()、自定义方法
Bean 延迟初始化- XML 配置:
- Java 注解:@Lazy(true)
思考:当某个 Bean 定义为延迟初始化,那么,Spring 容器返回的对象与非延迟的对象存在怎样的差异?
非延迟加载:Bean在应用上下文启动之前就已经初始化
延迟加载:Bean在应用上下文启动之后初始化,返回的是二级代理对象
public class DefaultUserFactory implements UserFactory, InitializingBean, DisposableBean {
// 1. 基于 @PostConstruct 注解
@PostConstruct
public void init() {
System.out.println("@PostConstruct : UserFactory 初始化中...");
}
public void initUserFactory() {
System.out.println("自定义初始化方法 initUserFactory() : UserFactory 初始化中...");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("InitializingBean#afterPropertiesSet() : UserFactory 初始化中...");
}
@PreDestroy
public void preDestroy() {
System.out.println("@PreDestroy : UserFactory 销毁中...");
}
@Override
public void destroy() throws Exception {
System.out.println("DisposableBean#destroy() : UserFactory 销毁中...");
}
public void doDestroy() {
System.out.println("自定义销毁方法 doDestroy() : UserFactory 销毁中...");
}
@Override
public void finalize() throws Throwable {
System.out.println("当前 DefaultUserFactory 对象正在被垃圾回收...");
}
}
@PostConstruct : UserFactory 初始化中... InitializingBean#afterPropertiesSet() : UserFactory 初始化中... 自定义初始化方法 initUserFactory() : UserFactory 初始化中... Spring 应用上下文已启动... org.geekbang.thinking.in.spring.bean.factory.DefaultUserFactory@1ba9117e Spring 应用上下文准备关闭... @PreDestroy : UserFactory 销毁中... DisposableBean#destroy() : UserFactory 销毁中... 自定义销毁方法 doDestroy() : UserFactory 销毁中... Spring 应用上下文已关闭...



