在Spring实例化bean的前后执行一些附加操作。
有时,你会发现需要立刻在Spring实例化一个bean的前后执行一些附件操作。这些操作可以简单到修改一个bean,也可以复杂到返回一个完全不同的对象。
BeanPostProcessor接口包含两个方法:
postProcessBeforeInitialization:在Spring调用任何bean的初始化钩子(例如InitializingBean.afterPropertiesSet或者init方法)之前被调用。
postProcessAfterInitialization:Spring在成功完成嵌入初始化以后调用他。
例子1:
我们声明了一个实现了BeanPostProcessor接口的类InitDestroyAnnotationBeanPostProcessor,这个类支持声明式的指定注解规则(默认为JSR 250注解)
-
public class SimpleBean
{ - @PostConstruct
-
public void initialize()
{ -
System.out.println("Initializing
bean " +
getClass()); - }
- @PreDestroy
-
public void cleanUp()
{ -
System.out.println("Cleaning
up bean " +
getClass()); - }
- }
配置:
-
<?xml
version="1.0" encoding="UTF-8"?> -
<beans
xmlns="http://www.springframework.org/schema/beans" -
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -
xsi:schemaLocation=" - http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
-
<bean
id="simpleBean" class="com.apress.prospring2.ch04.bpp.SimpleBean"/> -
<bean
id="bpp" class="org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor"> -
<property
name="initAnnotationType" value="javax.annotation.PostConstruct"/> -
<property
name="destroyAnnotationType" value="javax.annotation.PreDestroy"/> - </bean>
- </beans>
调用:
-
public class SimpleBeanDemo
{ -
public static void main(String[]
args) { -
ConfigurableListableBeanFactory
beanFactory = new XmlBeanFactory( - new ClassPathResource(