本文将会讲到SpringBoot的IOC模块下的注解进行总结,主要目的是为了方便之后查找注解和快速应用。
将会以:组件注册,生命周期,属性赋值,自动装配来进行区分。
二、生命周期
1、总结:自定义Bean的初始化和销毁方法
1)、 指定init-method 和 destory-method
2)、 通过让 Bean 实现 InitializingBean 接口,定义初始化逻辑
DisposableBean 接口,定义销毁逻辑
3)、可用 @PostConstruct,在 Bean 创建完成并且赋值完成后,执行该注解标注的方法
@PreDestroy,在容器销毁 Bean 之前,执行该注解标注的方法
4.)、BeanPostProcessor ,在Bean 初始化前后进行一些处理工作
postProcessBeforeInitialization: 在初始化之前工作
postProcessAfterInitialization: 在初始化之后工作
创建:Bean 构造函数 ——> @PostConstruct ——> InitializingBean 接口 ——> bean 定义的 init-method
——> postProcessBeforeInitialization ——> Bean 初始化完成 ——> postProcessAfterInitialization ——> 容器创建完成
销毁:@PreDestroy ——> DisposableBean 接口 ——> bean 定义的 destoryMethod ——> Bean销毁
2、示例:
1)、init-method 和 destory-method
@Configuration
public class MainConfigOfLifeCycle {
@Bean(initMethod="initTest", destroyMethod="detoryTest")
public Car car() {
return new Car();
}
}
public class Car {
public void initTest() {
System.out.println(" .. init-method .. ");
}
public void detoryTest() {
System.out.println(" .. destory-method .. ");
}
}
2)、InitializingBean 和 DisposableBean 接口
@Configuration
public class MainConfigOfLifeCycle {
@Bean
public Cat cat() {
return new Cat();
}
}
public class Cat implements InitializingBean, DisposableBean {
//该Bean在销毁时,调用
public void destroy() throws Exception {
// TODO Auto-generated method stub
System.out.println(" .. DisposableBean .. ");
}
//该Bean创建完成并且赋值完成后,调用
public void afterPropertiesSet() throws Exception {
// TODO Auto-generated method stub
System.out.println(" .. InitializingBean .. ");
}
}
3)、@PostConstruct 和 @PreDestroy
@Configuration
public class MainConfigOfLifeCycle {
@Bean
public Dog dog() {
return new Dog();
}
}
public class Dog {
//对象创建并赋值之后调用
@PostConstruct
public void init() {
System.out.println(" .. @PostConstruct .. ");
}
//容器移除对象之前
@PreDestroy
public void detory() {
System.out.println(" .. @PreDestroy .. ");
}
}
4)、BeanPostProcessor 接口
@Configuration
public class MainConfigOfLifeCycle {
@Bean
public MyBeanPostProcessor myBeanPostProcessor() {
return new MyBeanPostProcessor();
}
}
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// TODO Auto-generated method stub
System.out.println(" .. postProcessBeforeInitialization .. ");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// TODO Auto-generated method stub
System.out.println(" .. postProcessAfterInitialization .. ");
return bean;
}
}