关于后端:九BeanPostProcessor

2次阅读

共计 1479 个字符,预计需要花费 4 分钟才能阅读完成。

一、什么是 BeanPostProcessor?

所谓的 BeanPostProcessor 其实是 Spring 为咱们关上的一个窗口,就犹如拦截器一样,在 bean 对象初始化之前和初始化实现之后,能够对 bean 进行进一步的包装;

BeanPostProcessor 的作用: 对 Spring 工厂所创立的对象,进行再加工,它也成就了 AOP 的实现

BeanPostProcessor 实质上就是一个接口,通过实现这个接口的办法,就能对 Bean 进行包装

备注 : 在上图中一个 bean 的创立首先会调用类的无参结构,而后注入(DI),再而后进入到了 postProcessBeforeInitialization,再到初始化 bean,初始化实现后再去到 postProcessAfterInitiazation 中,最初给到调用者,留神办法中的两个参数 Object bean 就为 Spring 创立的 bean 对象,而 beanName 为咱们在标签中申明的 id 值
1.1 实战留神
在实战中,咱们很少去解决 Spring 的初始化操作,所以没必要辨别 Before 办法或者 After 办法,咱们只须要在将 bean 给到调用者前,对 bean 进行包装就达到咱们的目标,所以咱们只须要实现一个 After 办法即可
然而咱们须要留神的是,Before 办法能够不做任何对 bean 的加工操作,然而必须 return bean 对象
二、实战步骤
第一步: 书写你的 BeanPostProcessor 类继承 BeanPostProcessor 接口,并重写办法

public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // 如果这个办法外部没有对 bean 做任何解决,须要击鼓传花似地将 bean 返回
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof Catagory) {((Catagory) bean).setName("Paul-Paul");
            ((Catagory) bean).setOrder(25);
        }
        return bean;
    }
}

第二步: 创立你的 bean 对象 (因为过于简略,这里不展现了)
第三步: 在配置文件中注入测试的 bean 和处理器 bean

<!--1. 注入 Catagory 对象 -->
<bean id="catagory" class="cn.paul.spring.demo.hellospring.entity.Catagory">
    <property name="name" value="Jack"/>
    <property name="order" value="18"/>
</bean>
<!--2. 申明 BeanPostProcessor-->
<bean id="myPostProess" class="cn.paul.spring.demo.hellospring.process.MyBeanPostProcessor"/>
<!--3. 注入另一个对象,做比照试验 -->
<bean id="user" class="cn.paul.spring.demo.hellospring.entity.User"/>
正文完
 0