`

spring-扩展点-BeanFactoryPostProcessor

阅读更多

BeanFactoryPostProcessor:允许自定义对ApplicationContext的 bean definitions 进行修饰,扩展功能。

1、实现BeanFactoryPostProcessor 接口,会被Application contexts自动发现
2、BeanFactoryPostProcessor 仅仅对 bean definitions 发生关系,不能对bean instances 交互,对bean instances 的交互,由BeanPostProcessor的实现来处理
3、PropertyResourceConfigurer :典型实现 属性替换的功能

4、CustomEditorConfigurer :典型实现 添加自定义属性编辑器的功能
5、ConfigurationClassPostProcessor:启动@Configuration的扫描功能
举例:
有这样的也个业务场景:

 <bean id="user" class="com.gym.UserServiceImpl" >
       <property name="username" value="${username_}"/>
       <property name="password" value="${password_}"/>
</bean>



spring支持系统对username_进行占位符的配置为properties文件配置,试想如果我们有个配置中心,我们希望spring启动的时候,从远程配置中心取数据,而非本地文件,这里就需要我们自定义一个实现BeanFactoryPostProcessor的PropertyResourceConfigurer 实例。
看下面的例子:

xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context 
	http://www.springframework.org/schema/context/spring-context-3.0.xsd"
	default-autowire="byName">

     <bean id="user" class="com.gym.UserServiceImpl" >
       <property name="username" value="${username_}"/>
       <property name="password" value="${password_}"/>
     </bean>
     
     <bean id="myFactoryPostProcessor" class="com.gym.MyFilePlaceHolderBeanFactoryPostProcessor"/>
</beans>



模拟从远程取文件:

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.core.io.support.PropertiesLoaderUtils;

/**
 * @author xinchun.wang
 */
public class MyFilePlaceHolderBeanFactoryPostProcessor 
    extends PropertyPlaceholderConfigurer implements InitializingBean{
	
	public void afterPropertiesSet() throws Exception {
		List<Properties> list = new ArrayList<Properties>();
		Properties p = PropertiesLoaderUtils.loadAllProperties("config.properties");
		list.add(p);
		//这里是关键,这就设置了我们远程取得的List<Properties>列表
		setPropertiesArray(list.toArray(new Properties[list.size()]));
	}
	
}



javaBean配置:

public class UserServiceImpl implements IUserService{
	private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);

	public UserServiceImpl(){
		logger.info("UserServiceImpl 构造函数 ");
	}
	
	private String username;
	private String password;

	public String getUsername() {
		return username;
	}

	public String getPassword() {
		return password;
	}

	public void setUsername(String username) {
		logger.info("UserServiceImpl setUsername {}",username);
		this.username = username;
	}

	public void setPassword(String password) {
		logger.info("UserServiceImpl setPassword {}",password);
		this.password = password;
	}

	@Override
	public String toString() {
		return "UserServiceImpl [username=" + username + ", password="
				+ password + "]";
	}
	
}



测试:

public class TestApplicationContext {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
				"classpath:spring/applicationContext.xml");
		IUserService userService = applicationContext.getBean(IUserService.class);
		String password = userService.getPassword();
		applicationContext.destroy();
		System.out.println(password);
	}

}



------------------------------系统调用入口:------------------------------
调用入口:

 

  • 大小: 82.6 KB
1
0
分享到:
评论

相关推荐

    spring-framework-3.2.13.RELEASE 源码

    最后,Spring的容器提供了多种扩展点,如BeanPostProcessor、BeanFactoryPostProcessor等,这使得开发者可以在容器初始化阶段自定义逻辑。在3.2.13.RELEASE中,我们可以探索这些扩展点的实现,以及如何利用它们增强...

    spring-framework-4.3.6 API

    1. 容器扩展:Spring 提供了 BeanPostProcessor 和 BeanFactoryPostProcessor 接口,允许用户自定义扩展点,实现更精细的控制。 2. Annotation-based Configuration:除了 XML 配置外,4.3.6 版本更加强调注解驱动的...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.1.1. 使用BeanPostProcessor的Hello World示例 3.7.1.2. RequiredAnnotationBeanPostProcessor示例 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7....

    spring-reference.pdf

    综上所述,Spring框架通过其强大的依赖注入机制和丰富的扩展点,为Java开发者提供了一个灵活、高效、可扩展的开发平台。无论是构建简单的Web应用还是复杂的企业级系统,Spring都能提供强有力的支持。

    Spring注解驱动扩展原理BeanFactoryPostProcessor

    Spring框架中的BeanFactoryPostProcessor是一个非常重要的扩展点,它允许开发者在BeanFactory标准初始化之后对其进行定制和修改。下面我们将详细介绍BeanFactoryPostProcessor的扩展原理和使用方法。 首先,...

    Spring Reference - Core Technologies.pdf

    1.8 容器扩展点 Spring框架允许开发者扩展容器行为,这包括自定义BeanPostProcessor、BeanFactoryPostProcessor等。 在Spring框架的学习和应用中,开发者需要深刻理解这些核心知识点,只有这样,才能充分利用Spring...

    Springboot启动扩展点超详细教程小结

    Springboot启动扩展点是Spring框架的核心思想,容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们...

    spring扩展原理1

    本文主要探讨Spring扩展原理,特别是`BeanFactoryPostProcessor`、`BeanDefinitionRegistryPostProcessor`以及`ApplicationListener`这三种核心扩展点。 首先,`BeanFactoryPostProcessor`是Spring IOC容器中的一种...

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

    BeanFactoryPostProcessor接口是Spring提供的一种扩展点,它允许在容器实例化相应对象之前,对注册到容器的BeanDefinition所保存的信息做一些额外的操作,例如修改bean定义的某些属性或者增加其他信息等。...

    java学习之spring2.0

    - **Bean的高级功能**:如bean的继承、FactoryBean、BeanPostProcessor和BeanFactoryPostProcessor等,增强了Bean的灵活性和扩展性。 4. **整合其他技术** - **MVC框架**:Spring MVC提供了模型-视图-控制器的...

    高级Java人才培训专家-spring高级49讲

    - **BeanFactory后处理器**:分析BeanFactoryPostProcessor接口如何扩展Spring容器的功能。 - **Aware接口**:介绍Aware接口及其在Spring中的应用场景。 - **初始化与销毁**:深入研究Bean的初始化与销毁过程。 - **...

    2023最新Spring全家桶面试题-图灵徐庶

    11. Spring的扩展点:包括BeanFactoryPostProcessor、BeanPostProcessor、InstantiationAwareBeanPostProcessor等。 二、Spring Beans 12. Spring beans:是Spring框架中的核心组件,提供了一个通用的方式来创建和...

    spring 宝典

    ### Spring宝典知识点详解 #### 一、Spring框架概述及核心机制 - **Spring框架的起源与发展** - Spring框架自发布以来迅速成为最受欢迎的Java企业级应用开发框架之一,其核心价值在于提供了轻量级的IoC容器,极大...

    Spring4中文文档

    文档最后还涉及到了Spring容器的扩展点,如BeanPostProcessor和BeanFactoryPostProcessor,这些扩展点让开发者有机会在Spring容器实例化Bean前后以及加载配置元数据前后执行自定义逻辑。 整体来看,Spring4中文文档...

    Spring5.0中文开发手册

    - **3.8 容器扩展点** - **3.8.1 使用BeanPostProcessor定制bean** - BeanPostProcessor接口允许开发者在bean初始化前后执行自定义操作。 - **3.8.2 使用BeanFactoryPostProcessor定制配置元数据** - 可以修改...

    spring开发指南

    ### Spring开发指南知识点详解 #### 一、Spring框架概述 - **定义**:Spring框架是一个开源的轻量级Java EE应用程序框架,旨在简化企业级应用的开发过程。它由Rod Johnson创建并领导开发,最初发布于2004年。 - **...

    Spring源码解析文件说明

    - 支持各种扩展点,如`BeanPostProcessor`、`ApplicationContextAwareProcessor`等。 - 注册各种接口实现类,例如`EnvironmentAware`、`EmbeddedValueResolverAware`等。 - 配置资源加载器`...

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

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

Global site tag (gtag.js) - Google Analytics