好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解Spring中Bean后置处理器(BeanPostProcessor)的使用

一、BeanPostProcessor接口

Bean后置处理 :对Spring 工厂创建的对象进行二次加工处理,即预初始化和后初始化。

PostProcessor中文意思就是后置处理器。

BeanPostProcessor 接口也被称为 Bean后置处理器 ,通过该接口可以自定义调用初始化前后执行的操作方法。

该接口中包含了两个方法:before方法(预初始化)和after方法(后厨是化)

postProcessBeforeInitialization() 方法:在 Bean 实例化、属性注入后,初始化前调用。

postProcessAfterInitialization() 方法:在 Bean 实例化、属性注入、初始化都完成后调用。

二、案例

创建User类,为了更好的观察bean周期执行流程,在类中添加 无参构造器方法 、 setter注入方法 、 init()初始化方法 和 destory()销毁方法 ,并在方法中都输出一句话。代码如下

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

/**

  * 观察bean周期执行流程

  */

public class User {

     String name;

     int age;

 

     //无参构造方法

     public User() {

         System.out.println( "这是无参构造方法" );

     }

 

     //setter方法

     public void setName(String name) {

         System.out.println( "这是setter注入name" );

         this .name = name;

     }

 

     public void setAge( int age) {

         System.out.println( "这是setter注入age" );

         this .age = age;

     }

 

     //初始化回调方法

     public void init() throws Exception {

         System.out.println( "这是初始化回调方法" );

     }

 

     //销毁回调方法

     public void destroy() throws Exception {

         System.out.println( "这是销毁回调方法" );

     }

 

     //toString方法

     @Override

     public String toString() {

         return "User{" +

             "name='" + name + '\ '' +

             ", age=" + age +

             '}' ;

     }

}

创建PostProcessor类,实现 BeanPostProcessor接口 ,并重写预初始化方法 postProcessBeforeInitialization() 和后初始化方法 postProcessAfterInitialization()

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

/**

  * Spring Bean后置处理器

  */

public class PostProcessor implements BeanPostProcessor {

     @Override

     public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

         System.out.println(beanName+ "正在执行预初始化方法" );

         return bean;

     }

 

     @Override

     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

         System.out.println(beanName+ "正在执行后初始化方法" );

         return bean;

     }

}

编写spring配置文件,添加bean

?

1

2

3

4

5

6

7

<!--添加user bean-->

< bean id = "user" class = "com.bighorn.pojo.User" init-method = "init" destroy-method = "destroy" >

     < property name = "name" value = "bighorn" />

     < property name = "age" value = "18" />

</ bean >

<!-- 注册后置处理器 -->

< bean id = "postProcessor" class = "com.bighorn.config.PostProcessor" />

编写运行程序

?

1

2

3

4

5

6

7

8

9

10

public static void main(String[] args) {

     //获取 ClassPathXmlApplicationContext 容器

     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml" );

     //从容器中获取对象

     User user = context.getBean( "user" , User. class );

     //使用bean

     System.out.println( "使用bean:" +user);

     //调用close方法关闭容器

     context.close();

}

运行结果如下,通过结果我们可以清晰地看到bean生命周期执行流程。

三、总结

实际开发中,spring bean初始化操作比较少,一般采用后置处理器加工bean。

后置处理器有两个方法:before和after方法。推荐使用after方法,即后初始化方法。

到此这篇关于详解Spring中Bean后置处理器(BeanPostProcessor)的使用的文章就介绍到这了,更多相关SpringBean后置处理器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://juejin.cn/post/7105271284333805581

查看更多关于详解Spring中Bean后置处理器(BeanPostProcessor)的使用的详细内容...

  阅读:18次