//大致使用这三种方式
BeanPostProcessor
@PostConstruct @PreDestroy
initMenthod DestroyMethod
BeanPostProcessor 两个方法 postProcessBeforeInitialization postProcessAfterInitialization
@PostConstruct 和 postProcessBeforeInitialization
postProcessBeforeInitialization 在 @PostConstruct 之前调用
postProcessAfterInitialization 在 @PreDestroy 之前调用
@PostConstruct 和 initMethod
@PostConstruct在InitMethod之前执行
@PreDestroy 和 DestroyMethod
@PreDestroy在DestroyMethod之前执行
使用方法:
1.实现BeanPostProcessor
@Configuration
public class MyBeanPostProcessor implements BeanPostProcessor {
/**
* bean初始化之前调用
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
/**
* bean初始化之后调用
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
2. 方法上使用@PostConstruct, @PreDestroy注解
@Service
public class StudentServiceImpl implements StudentService {
@PostConstruct
public void postConstruct(){
System.out.println("当前bean被初始化了。。。。。当前bean初始化之前会调用当前方法");
}
@PreDestroy
public void preDestory(){
System.out.println("当前bean销毁了。。。。。当前bean销毁之前会调用当前方法");
}
}
3. 使用initMenthod,destroyMethod
/**
* 注册bean
*/
@Bean(initMethod = "method1",destroyMethod = "method2")
public Teacher teacher(){
return new Teacher();
}
/**
* 实体
*/
@Data
public class Teacher {
public void method1(){
System.out.println("初始化之前调用teacher method1 。。。。。。。。。。。。初始化之前调用teacher method1");
}
public void method2(){
System.out.println("销毁之前调用teacher method2 。。。。。。。。。。。。销毁之前调用teacher method2");
}
}
总结:BeanPostProcessor > @PostConstruct > initMethod