Spring BeanFactoryPostProcessor

Spring提供了一种叫做BeanFactoryPostProcessor的容器扩展机制,该机制允许我们实例化相应对象之前,对注册到容器的BeanDefinition所保存的信息做相应的修改。这就相当于在容器实现的第一阶段最后加入一道工序,让我们对最终的BeanDefinition做一些额外的操作,比如修改其中bean定义的某些属性,为bean定义增加其他信息等。

如果要自定义实现BeanFactoryPostProcessor,通常我们需要实现org.springframework.beans.factory.config.BeanFactoryPostProcessor接口。同时因为一个容器可能拥有多个BeanFactoryPostProcessor,这个时候可能需要实现类同时实现Spring的org.springframework.core.Ordered接口。但是,因为Spring已经提供了几个现成的BeanFactoryPostProcessor实现类。所以,大多时候,我们很少自己去实现某个BeanFactoryPostProcessor。

我们可以通过两种方式来应用BeanFactoryPostProcessor,分别针对基本的IoC容器BeanFactory和较为先进的容器ApplicationContext。

对于BeanFactory来说,我们需要用手动方式应用所有的BeanFactoryPostProcessor。

对于ApplicationContext来说,情况看起来要好得多。因为ApplicationContext会自动识别配置文件中的BeanFactoryPostProcessor并应用它。所以,相对于BeanFactory,在ApplicationContext中加载并应用BeanFactoryPostProcessor,仅需要在XML配置文件中将这些BeanFactoryPostProcessor简单配置一下即可。

时间: 2024-10-14 02:06:25

Spring BeanFactoryPostProcessor的相关文章

Annotation Type @bean,@Import,@configuration使用--官方文档

@Target(value={METHOD,ANNOTATION_TYPE}) @Retention(value=RUNTIME) @Documented public @interface Bean Indicates that a method produces a bean to be managed by the Spring container. Overview The names and semantics of the attributes to this annotation

spring 后置处理器BeanFactoryPostProcessor和BeanPostProcessor的用法和区别

主要区别就是: BeanFactoryPostProcessor可以修改BEAN的配置信息而BeanPostProcessor不能,下面举个例子说明 BEAN类: [java] view plaincopy package com.springdemo.postProcessor; public class PostProcessorBean { private String username; private String password; public String getPassword

转-Spring bean处理-InitializingBean&BeanPostProcessor&BeanFactoryPostProcessor

转自  http://elim.iteye.com/blog/2017466 执行顺序: BeanFactoryPostProcessor.postProcessBeanFactoryUserBean's constructorUserBean 's username property setBeanPostProcessor.postProcessBeforeInitializationInitializingBean.afterPropertiesSetBeanPostProcessor.p

Spring的BeanFactoryPostProcessor和BeanPostProcessor

PostProcessor:后处理器: BeanPostProcessor:Bean的后置处理器(处理的对象是Bean): BeanFactoryPostProcessor:BeanFactory的后置处理器(处理的对象是BeanFactory) (1)看一下BeanFactoryPostProcessor接口的源码: @FunctionalInterface public interface BeanFactoryPostProcessor { /** * Modify the applica

spring源码阅读(3)-- 容器启动之BeanFactoryPostProcessor

接着上文<spring源码阅读(2)-- 容器启动之加载BeanDefinition>,当spring加载完所有BeanDefinition时,并不会马上去创建bean,而是先配置beanFactory,例如设置一下装配规则和判断是否需要创建一些指定的bean. 1 protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { 2 // Tell the internal bean factor

Spring源码解读之BeanFactoryPostProcessor的处理

前言 前段时间旁听了某课堂两节Spring源码解析课,刚好最近自己又在重新学习中,便在这里记录一下学习所得.我之前写过一篇博文,是介绍BeanFactoryPostProcessor跟BeanPostProcessor是如何发挥作用的,当时觉得讲的还行,但是现在看来,太粗劣了,很多地方没涉及到,而且重点都被我忽略了,简直就是蠢得不行.现在就用这篇文章弥补一下前文中对BeanFactoryPostProcessor的讲解,争取把重点讲到,至于BeanPostProcessor,由于涉及到的东西太多

Spring中BeanFactoryPostProcessor的详解

Spring中BeanFactoryPostProcessor和BeanPostProcessor都是Spring初始化bean时对外暴露的扩展点.两个接口从名字看起来很相似,但是作用及使用场景却不同. Spring IoC容器允许BeanFactoryPostProcessor在容器实例化任何bean之前读取bean的定义(配置元数据),并可以修改它.同时可以定义多个BeanFactoryPostProcessor,通过设置'order'属性来确定各个BeanFactoryPostProces

Spring的BeanPostProcessor和BeanFactoryPostProcessor区别

Spring提供了两种后处理bean的扩展接口,分别为BeanPostProcessor和BeanFactoryPostProcessor,这两者在使用上是有所区别的. BeanPostProcessor:bean级别的处理,针对某个具体的bean进行处理 接口提供了两个方法,分别是初始化前和初始化后执行方法,具体这个初始化方法指的是什么方法,类似我们在定义bean时,定义了init-method所指定的方法<bean id = "xxx" class = "xxx&q

【spring源码学习】spring的IOC容器之BeanFactoryPostProcessor接口学习

[一]org.springframework.beans.factory.config.BeanFactoryPostProcessor接口==>该接口实现方法的执行时机:该接口void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException方法是在DefaultListableBeanFactory容器解析完xml,将IOC容器所有的bean形成BeanDefinitio