`
shukuiyan
  • 浏览: 412794 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

<转>Spring 的 BeanPostProcessor接口实现

阅读更多

from : http://blog.csdn.net/chensugang/article/details/3423650

 

今天学习了一下SpringBeanPostProcessor接口,该接口作用是:如果我们需要在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进行任何处理。

 

注意的一点:

BeanFactoryApplicationContext对待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初始化前后进行自定义处理。该接口提供了两个供开发者自定义的方法:...

    Spring In Action笔记100例

    在Spring框架中,`&lt;ref&gt;`标签用于表示一个对象引用,通常用来注入另一个Bean。该标签包含三个重要的属性:`bean`, `local`, 和 `parent`。 - **`bean`**: 指定要引用的Bean的名称。这是最常用的属性,当使用`&lt;ref ...

    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容器

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

    spring 注入原理

    此外,还可以通过实现`BeanFactoryPostProcessor`和`BeanPostProcessor`接口,自定义Spring容器的行为。 #### 结语 Spring的依赖注入机制是其强大功能的基石,通过对Bean的灵活管理和生命周期的控制,大大提高了...

    spring依赖注入的实现原理

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

    Spring中的后置处理器BeanPostProcessor详解

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

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

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

    spring中的BeanFactory解析xml文件

    在Spring框架中,实现BeanFactory接口的主要类是DefaultListableBeanFactory,它是最基础的IoC容器。 XML配置文件是Spring中定义bean及其依赖关系的传统方式。一个典型的Spring XML配置文件会包含若干个&lt;bean&gt;元素...

    Spring IoC源码深度剖析开源架构源码2021.pdf

    - 可以通过在接口实现的构造器、接口方法中设置断点,使用调试器观察线程调用栈来分析Bean对象创建和管理的触发时机。 4. **源码学习技巧** - 定焦原则:抓主线,即以源码的主要脉络为学习目标,理解框架的架构和...

    简单Spring容器实现

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

    Spring中与Bean相关的接口

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

    spring ioc思维导图源文件

    - **XML配置**:早期Spring主要通过XML文件定义Bean及其依赖,如`&lt;bean&gt;`标签用于定义一个Bean,`&lt;property&gt;`标签用于设置属性值。 - **注解配置**:随着Java注解的发展,Spring引入了@Component、@Service、@...

    spring4框架系列 [ 3 ]

    - **Bean后处理器**:实现`BeanPostProcessor`接口,可以注册回调方法,在Bean实例化和初始化前后进行操作。 - **AOP代理**:通过AOP,可以在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中实现接口动态的解决方法

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

Global site tag (gtag.js) - Google Analytics