概述
- 构造后置处理:在spring容器启动,加载并创建bean对象实例的时候调用,通常为在构造bean对象实例,将相关属性赋值好了调用。
- 销毁前置处理:在spring容器关闭,在销毁其所创建并管理的bean对象实例之前,执行销毁前置处理,通常可以用来释放外部资源等。
使用方法
1. JDK注解方式
- 构造后置处理:使用@PostConstruct注解对应的方法
- 销毁前置处理:使用@PreDestroy注解对应的方法。
- 可以应用在一个或多个方法上面,但是推荐使用一个方法。方法的可见性没有严格要求,即public,default(包可见),protected,private都可以。
- 基于JDK的注解方式是一个在spring容器外配置的方式,即不是使用spring自身注解。spring对这种方式的支持,主要是通过spring的CommonAnnotationBeanPostProcessor,这个BeanPostProcessor在spring容器创建bean之后和销毁bean之前调用对应的方法。
2. Spring的接口方式
- 构造后置处理:实现InitializingBean接口的afterPropertiesSet方法;
- 销毁前置处理:实现DisposableBean接口的destroy方法。
- 除了使用JDK提供的@PostConstruct和@PreDestroy,在spring中也可以自定义注解来实现,具体为通过InitDestroyAnnotationBeanPostProcessor来实现。CommonAnnotationBeanPostProcessor就是InitDestroyAnnotationBeanPostProcessor的子类,指定注解@PostConstruct和@PreDestroy。
3. XML配置或者@Bean注解
- 构造后置处理:在bean标签的init-method中指定处理方法;或者使用@Bean注解的initMethod指定,其中@Bean通常为@Configuration(或者是@Component或@Component的子注解,如@Service,@Configuration是@Component的一个子注解)注解里面的@Bean方法;
- 销毁前置处理:在bean标签的destroy-method中指定处理方法;或者使用@Bean注解的destroyMethod指定。