`

Spring 的 BeanPostProcessor接口实现

 
阅读更多
今天学习了一下Spring的BeanPostProcessor接口,该接口作用是:如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现。
package com.spring.test.di;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class BeanPostPrcessorImpl implements BeanPostProcessor {

    // Bean 实例化之前进行的处理
    public Object postProcessBeforeInitialization(Object bean, String beanName)
           throws BeansException {
       System.out.println("对象" + beanName + "开始实例化");
       return bean;
    }

    // Bean 实例化之后进行的处理
    public Object postProcessAfterInitialization(Object bean, String beanName)
           throws BeansException {
       System.out.println("对象" + beanName + "实例化完成");
       return bean;
    }
}

只要将这个BeanPostProcessor接口的实现定义到容器中就可以了,如下所示:
<bean class="com.spring.test.di.BeanPostPrcessorImpl"/>

测试代码如下:

package com.spring.test.di;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class TestMain {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {

       // 得到ApplicationContext对象
       ApplicationContext ctx = new FileSystemXmlApplicationContext(
              "applicationContext.xml");
       // 得到Bean
       ctx.getBean("logic");
    }
}
运行以上测试程序,可以看到控制台打印结果:

对象logic开始实例化
对象logic实例化完成

BeanPostProcessor的作用域是容器级的,它只和所在容器有关。如果你在容器中定义了BeanPostProcessor,它仅仅对此容器中的bean进行后置。它不会对定义在另一个容器中的bean进行任何处理。

注意的一点:
BeanFactory和ApplicationContext对待bean后置处理器稍有不同。ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调用它。部署一个后置处理器同部署其他的bean并没有什么区别。而使用BeanFactory实现的时候,bean 后置处理器必须通过下面类似的代码显式地去注册:

BeanPostPrcessorImpl beanPostProcessor = new BeanPostPrcessorImpl();
Resource resource = new FileSystemResource("applicationContext.xml");

ConfigurableBeanFactory factory = new XmlBeanFactory(resource);

factory.addBeanPostProcessor(beanPostProcessor);

factory.getBean("logic");
分享到:
评论

相关推荐

    Spring BeanPostProcessor接口使用详解

    Spring BeanPostProcessor接口使用详解 Spring BeanPostProcessor接口是Spring框架中的一种后处理器接口,允许开发者在Bean初始化前后进行自定义处理。该接口提供了两个供开发者自定义的方法:...

    Java自定义注解与spring BeanPostProcessor详解

    当Spring容器实例化一个bean时,如果该bean实现了BeanPostProcessor接口,那么Spring会在bean的初始化前后调用其`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法。这使得开发者可以在...

    Spring 内置 BeanPostProcessor类图.zip

    通常,类图会包含BeanPostProcessor接口、其方法签名、可能的实现类以及它们如何参与到Spring的bean生命周期中。通过分析这个类图,我们可以看到Spring如何调用这些自定义处理器,并理解它们在bean实例化过程中的...

    详解使用Spring的BeanPostProcessor优雅的实现工厂模式

    总结起来,Spring的BeanPostProcessor接口为我们在bean生命周期中的关键点提供干预点,使得我们可以根据业务需求实现工厂模式,尤其是当需要根据条件动态创建bean时。结合自定义注解,我们可以创建一个更加灵活、...

    Spring Annotaion Support详细介绍及简单实例

    当Spring容器启动时,它会检测到实现了BeanPostProcessor接口的Bean,并将其特殊处理。这些BeanPostProcessor实例会被用来处理容器中其他所有的Bean。因此,BeanPostProcessor是实现AOP中自动代理(auto-proxying)...

    详解Spring中实现接口动态的解决方法

    然而,如果不存在实现类,我们可以自定义BeanPostProcessor或InstantiationAwareBeanPostProcessor来在运行时创建接口的实例。这些处理器可以检查接口,动态生成实现类的字节码,然后使用CGLIB或Java代理(如果是...

    Spring中与Bean相关的接口

    在Spring框架中,Bean是核心概念,它代表了...综上所述,Spring中的Bean接口和注解为开发者提供了强大的工具,以实现灵活的依赖注入和对象管理。理解并熟练运用这些接口,能够使我们的代码更加简洁、高效,并易于维护。

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean,BeanDefinitionRegistryPostProcessor,BeanFactoryPostProcessor,BeanPostProcessor,ResourceLoaderA

    BeanPostProcessor接口的实现类如何被注册到Spring容器2.更改bean的定义(BeanFactoryPostProcessor接口)3.注册Bean到Spring容器(BeanDefinitionRegistryPostProcessor接口)4.通过FactoryBean结合...

    详解如何在低版本的Spring中快速实现类似自动配置的功能

    综上所述,要在低版本的Spring中实现类似自动配置的功能,需要巧妙地利用Spring提供的扩展点,如BeanFactoryPostProcessor和BeanPostProcessor,以及Java Config和XML配置的组合。同时,还需要结合生命周期回调和...

    springAOP核心组件分析

    它实现了BeanPostProcessor接口,通过这个接口,Spring容器能够在bean的初始化前后进行额外的处理,包括创建AOP代理。 AnnotationAwareAspectJAutoProxyCreator专门用于处理标注了@Aspect注解的切面类,并且根据配置...

    借助spring自定义命令执行器

    3. **BeanPostProcessor**:Spring的BeanPostProcessor接口是实现自定义命令执行器的关键。这个接口提供了两个方法`postProcessBeforeInitialization`和`postProcessAfterInitialization`,分别在bean初始化前和初始...

    spring中注解的实现原理

    通过实现`BeanFactoryPostProcessor`或`BeanPostProcessor`接口,你可以扩展Spring的行为,使其在处理自定义注解时执行特定的操作。 总结来说,Spring中注解的实现原理涉及到元注解的定义、注解处理器的运行、Bean...

    spring依赖注入的实现原理

    3. **接口注入**:Spring提供了一个`ApplicationContextAware`接口,实现了这个接口的类可以获取到Spring容器自身,从而获取到其他bean。 三、Spring依赖注入的实现原理 Spring依赖注入的实现主要基于反射和代理...

    BeanPostProcessor实现注入的@Autowired注入的对象是增强的代理对象.rar

    在Spring框架中,`BeanPostProcessor`是一个非常重要的接口,它允许我们自定义bean的处理逻辑,这包括在bean初始化前后进行干预。`@Autowired`注解是Spring提供的一种依赖注入方式,它能够自动匹配并注入合适的bean...

    Spring中的后置处理器BeanPostProcessor详解

    BeanPostProcessor 接口是 Spring 框架中一个非常重要的接口,它提供了一种方式来在bean实例化、配置和初始化方法前后添加自定义逻辑处理。通过实现 BeanPostProcessor 接口,我们可以在bean实例化、配置和初始化...

    简单Spring容器实现

    Spring容器的实现涉及到`DefaultListableBeanFactory`、`BeanDefinition`、`BeanPostProcessor`等多个类。在`MySpring`文件中,我们可能能看到类似的自定义实现: - `MyBeanFactory`:模拟`BeanFactory`,负责解析...

    动态代理接口并注册到spring容器

    在本案例中,我们将探讨如何实现一个动态代理接口并将其注册到Spring容器,以便于通过@Autowired注解或其他方式在Spring应用中使用。 首先,我们需要定义一个接口,例如`MyService`,这个接口包含了我们需要代理的...

    Spring.pdf

    容器本身也具备了极高的扩展性,开发者可以通过实现BeanPostProcessor接口来扩展Bean的生命周期。例如,可以在Bean初始化前后进行自定义的处理逻辑,这为开发者提供了很大的灵活性。 DefaultListableBeanFactory和...

    Spring容器扩展机制的实现原理

    在使用Spring时,可以通过实现BeanFactoryPostProcessor和BeanPostProcessor接口来扩展容器的功能。例如,可以使用BeanFactoryPostProcessor接口来修改BeanDefinition的信息,或者使用BeanPostProcessor接口来修改...

Global site tag (gtag.js) - Google Analytics