Bean生命周期图:

1、 创建BeanFactory(DefaultListableBeanFactory)
2、 手动注册BeanDefinition(ImportBeanDefinitionRegistrar.registerBeanDefinitions)
3、 BeanFactory后置处理(BeanFactoryPostProcessor.postProcessBeanFactory)
4、 调用Bean.class的构造器实例化Bean
5、 Bean初始化之前处理(BeanPostProcessor.postProcessBeforeInitialization)
6、 Bean构造器后置处理(PostConstruct)
7、 设置属性(InitializingBean .afterPropertiesSet)
8、 执行InitMethod
9、 Bean初始化结束之后处理(BeanPostProcessor.postProcessAfterInitialization)
10、Bean摧毁之前处理(PreDestroy)
11、Bean摧毁
启动类:
public class Start {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
applicationContext.close();
}
}
配置类:
@Configurable
@ComponentScan({ "com.spring.demo.beanlifecycle" })
@Import(ImportBeanDefinitionRegistrar_.class)
public class Config {
}
Bean:
public class Bean implements InitializingBean {
public Bean() {
System.out.println("invoke Construct: " + this);
}
public void init() {
System.out.println("init: " + this);
}
public void destroy() {
System.out.println("destroy: " + this);
}
@PostConstruct
public void postConstruct() {
System.out.println("PostConstruct: " + this);
}
@PreDestroy
public void preDestroy(){
System.out.println("PreDestroy: " + this);
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet: " + this);
}
}
registerBeanDefinitions:
public class ImportBeanDefinitionRegistrar_ implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
BeanDefinition beanDefinition =
BeanDefinitionBuilder.rootBeanDefinition(Bean.class).setInitMethodName("init").setDestroyMethodName("destroy").getBeanDefinition();
registry.registerBeanDefinition("bean", beanDefinition);
System.out.println("registerBeanDefinitions: " + beanDefinition);
}
}
BeanFactoryPostProcessor:
@Component
public class BeanFactoryPostProcessor_ implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("postProcessBeanFactory :" + beanFactory.getBeanDefinition("bean"));
}
}
BeanPostPrcesser
@Component
public class BeanPostProcessor_ implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean.getClass().equals(Bean.class)) {
System.out.println("postProcessBeforeInitialization : " + bean.toString());
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean.getClass().equals(Bean.class)) {
System.out.println("postProcessAfterInitialization : " + bean.toString());
}
return bean;
}
}
执行结果
registerBeanDefinitions: Root bean: class [com.spring.demo.beanlifecycle.Bean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=init; destroyMethodName=destroy postProcessBeanFactory : Root bean: class [com.spring.demo.beanlifecycle.Bean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=init; destroyMethodName=destroy invoke Construct: com.spring.demo.beanlifecycle.Bean@74294adb postProcessBeforeInitialization : com.spring.demo.beanlifecycle.Bean@74294adb PostConstruct: com.spring.demo.beanlifecycle.Bean@74294adb afterPropertiesSet: com.spring.demo.beanlifecycle.Bean@74294adb init: com.spring.demo.beanlifecycle.Bean@74294adb postProcessAfterInitialization : com.spring.demo.beanlifecycle.Bean@74294adb PreDestroy: com.spring.demo.beanlifecycle.Bean@74294adb destroy: com.spring.demo.beanlifecycle.Bean@74294adb
over