`
buynow96
  • 浏览: 3768 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Spring Bean后处理器

阅读更多

Spring Bean后处理器

Spring提供了两类后处理器

1.Bean后处理器

2.容器后处理器

 

Spring的很多功能就是通过这些后处理来提供高质量的服务。而程序员只需要简单几部同样可以自定义功能强大的后处理器,今天我们将简述Bean后处理器

 

一、Bean后处理器

用来加强Spring容器中的bean处理。可以在bean在spring容器中初始化前后对bean进行自定义处理。

1.自定义一个自定义一个bean后处理器:

       public class MyBeanProcessor implements BeanPostProcessor{

               @Override

               public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {

                       System.out.println("bean:"+arg1+" after");

                       return arg0;

               }

               @Override

               public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException{

                      System.out.println("bean:"+arg1+" before");

                      return arg0;

               }

        }

Bean后处理器要求实现接口BeanPostProcessor

该接口要求实现的两个方法:

       Object postProcessBeforeInitialization(Object object,String name)

              在bean初始化前Spring将回调该方法

              参数:object 被后处理的bean

                               name 被后处理bean的id

              返回:被处理后的bean

       Object postProcessAfterInitialization(Object object,String name)

              在bean初始化后Spring将回调该方法

              参数:object 被后处理的bean

                               name 被后处理bean的id

              返回:被处理后的bean

2.注册bean后处理器到容器

       <!-- bean 后处理bean -->

<bean class="cn.zhaoyuening.utils.MyBeanProcessor"></bean>

Spring在初始化bean过程中如果发现bean实现了BeanPostProcessor 接口,将会将其注册为bean后处理器,它对spring容器下的所有bean起作用,任何bean在 初始化过程都会通过bean后处理器做额外增强操作。

3.后处理器在Bean初始化过程中调用的时机



 

 

4.接下来我们做一个小demo

创造一个Persion Bean:

 

public class Persion{

        private String name;

        private int age;

        private char gender;

 

        public void work(){

                System.out.println(name+"working...");

        }

        public void init(){

                System.out.println("persion bean 被初始化");

        }

        //省略若干get&set 方法

}

注册:

//声明初始化方法为init,在初始化进程始将被调用

<bean id="persion" class="cn.zhaoyuening.model.Persion" init-method="init"></bean>

创造Bean后处理器:



  

      注册后Bean处理器:

      <!-- bean 后处理bean -->

      <bean class="cn.zhaoyuening.utils.MyBeanProcessor"></bean>

      在此没有为后处理bean设置id值,因为当spring自动装载所有bean时发现某个bean 实现了BeanPostProcessor 接口将自动注册为后处理bean。

但如果不自动装载bean如使用(BeanFactory)需要设置id值,并手动注册:

<bean class="cn.zhaoyuening.utils.MyBeanProcessor" id=”processor”></bean>

BeanPostProcessor processor = (BeanPostProcessor)baenFactory.getBean(“processor”);

beanFactory.addBeanPostProcessor(processor);

 

       执行:

private ApplicationContext beansContext = new ClassPathXmlApplicationContext("applicationContext.xml");

       @Test

       public void test() throws Exception {

               Persion persion = beansContext.getBean("persion",Persion.class);

               persion.work();

}

       结果:

bean:persion before #执行bean后处理器的postProcessBeforeInitialization方法

persion bean 被初始化 #Bean 初始化

bean:persion after  #执行bean后处理器的postProcessAfterInitialization方法

#执行persion bean的初始化方法,后处理器中设置name为了buynow

buynow working... 

 

  • 大小: 26.5 KB
  • 大小: 7.8 KB
1
1
分享到:
评论

相关推荐

    Spring 容器后处理器

    为了使Spring能够自动识别这个后处理器,通常需要将其配置为一个普通的bean,并且需要使用`ApplicationContext`作为容器,因为`BeanFactory`无法自动识别BeanFactoryPostProcessor。 #### 四、内置的容器后处理器 ...

    Spring Bean 后置处理器.pdf

    spring Bean 后置处理器.pdf

    Spring Bean 加载顺序 .

    例如,通过调整Bean的加载顺序,可以控制某些服务的初始化时机,或者通过后处理器增强Bean的功能。通过合理的配置和设计,我们可以充分利用Spring的IoC和DI特性,实现松耦合、易于测试和维护的代码。

    Spring实战之Bean的后处理器操作示例

    Spring实战之Bean的后处理器操作示例 本文主要介绍了Spring实战之Bean的后处理器操作,结合实例形式详细分析了Bean的后处理器相关配置、操作方法及使用注意事项。 Bean的后处理器 在Spring框架中,Bean的后处理器...

    Spring Key tutorial PDF

    #### Spring Bean 后处理器 Bean 后处理器是在 bean 被创建后对其进行自定义操作的一种机制。 - **示例**:实现 BeanPostProcessor 接口,并重写 postProcessBeforeInitialization 和 ...

    Spring实例化Bean顺序

    4. **启动后处理器(BeanPostProcessor)**:这些是特殊类型的Bean,它们在所有常规Bean实例化之后,但初始化之前进行处理。它们的实例化顺序由`@Order`注解决定,或者通过实现`Ordered`接口来控制。 5. **...

    110-140上传请查阅,谢谢!

    2. Spring Bean后处理器:"139-框架篇-06-spring_refresh_06_注册bean后处理器"涉及的是Spring中的Bean后处理器,这是一种扩展点,允许在Bean实例化后、初始化之前或初始化之后进行额外的操作,比如属性注入、AOP...

    Spring Bean 的生命周期.docx

    1. BeanNameAware:当Bean实例化并设置了属性后,Spring会调用`setBeanName`方法,将Bean的名称传入,允许Bean知道自己的名字。 2. BeanFactoryAware:在`setBeanName`之后,Spring会调用`setBeanFactory`方法,将...

    Spring MVC 配置请求的默认处理器.rar

    在Spring MVC框架中,配置请求的默认处理器是构建Web应用程序的关键步骤。这个过程涉及到设置DispatcherServlet,它作为Spring MVC的核心组件,负责调度HTTP请求到相应的控制器。以下将详细阐述Spring MVC配置请求的...

    自定义 Schema 解析 Spring Bean

    3. **编写Schema处理器**: 这个处理器是Spring的BeanDefinitionParser接口的实现,它负责解析自定义元素,并根据配置创建相应的BeanDefinition。例如,如果解析到`&lt;myapp:service&gt;`元素,处理器可以创建一个服务类的...

    Spring 源码(14)Spring Bean 的创建过程(5).doc

    在`BeanFactory`创建Bean的过程中,Spring会遍历所有实现了`SmartInstantiationAwareBeanPostProcessor`的`BeanPostProcessor`,寻找能提供构造函数信息的处理器。 在`createBeanInstance`方法中,如果存在`...

    Spring在应用中获得Bean的方法

    此外,`@Autowired`注解的工作原理涉及`AutowiredAnnotationBeanPostProcessor`类,它是一个Bean后处理器,会在Bean实例化后进行处理,找到匹配的依赖并注入。 在开发中,Spring提供的各种工具如`BeanPostProcessor...

    spring 中特殊bean用法

    9. **Bean后处理器(Bean Post Processor)**: Bean后处理器允许在初始化Bean之后和销毁Bean之前执行自定义逻辑。通过实现`BeanPostProcessor`接口,我们可以自定义Bean的初始化和销毁行为。 10. **Resource注入**:...

    spring在@Bean注解中initMethod调用方法异步

    在Spring框架中,`@Bean`注解是一个关键的组件,用于声明一个方法将返回的对象作为Spring容器中的bean。在`@Bean`中定义`initMethod`属性,可以指定该bean初始化时需要调用的方法。当`initMethod`被设置为异步执行,...

    spring中bean的生命周期详解

    下面是添加Bean后置处理器后Bean的生命周期: 1. 通过构造器或工厂方法创建Bean实例。 2. 为Bean的属性设置值和对其他Bean的引用。 3. 将Bean实例传递给Bean后置处理器的postProcessBeforeInitialization()方法。 4...

    Spring Bean的生命周期详细介绍

    5. 容器级处理:工厂后处理器在Bean实例化后和初始化之前进行处理,例如ConfigurationClassPostProcessor负责处理@Configuration类。 6. 正常服务:Bean现在准备就绪,可以被其他Bean使用,或者由应用程序代码直接...

    Bean的后置处理器MergedBeanDefinitionPostProcessor.docx

    总的来说,`MergedBeanDefinitionPostProcessor`是一个关键的组件,它在Spring容器中处理Bean定义的合并后阶段,通过不同的处理器对Bean定义进行增强,确保了如自动装配、初始化回调等特性能够正确地应用于Bean实例...

    jdk代理,cgib代理和spring后处理bean的关系

    在Spring中,Bean的生命周期管理是非常重要的一个部分,Spring提供了一系列后处理器(BeanPostProcessor)接口,允许开发者在Bean初始化前后插入自定义逻辑。例如,AOP(面向切面编程)的实现就利用了这些后处理器。...

    详解Spring中bean的作用域

    让 Spring 容器释放被 singleton 作用域 bean 占用资源的一种可行方式是,通过使用 bean 的后置处理器,该处理器持有要被清除的 bean 的引用。 3. Request 作用域 Request 作用域是指该针对每一次 HTTP 请求都会...

Global site tag (gtag.js) - Google Analytics