Spring 的前置处理器介绍

本文详细介绍了Spring的前置处理器机制,包括BeanFactoryPostProcessor接口,以及三种常见的前置处理器:PropertyPlaceholderConfigurer、PropertyOverrideConfigurer和CustomEditorConfigurer。它们分别用于处理XML中的占位符、覆盖bean定义中的属性值以及注册自定义类型转换器。文章通过实例展示了如何使用这些处理器,并探讨了它们的工作原理和应用场景。
摘要由CSDN通过智能技术生成

SpringIOC容器它会以某种方式,加载配置文件中的 信息,将其解析为一个个的BeanDefinition.之后将BeanDefinition注册到容器之中。Spring IOC容器在实现的时候经过的过程可以使用如下图片表示:

分为两个主要部分:
其一 :容器启动阶段
其二:bean实例化阶段。
在这里插入图片描述
在容器的启动阶段主要做的是一些信息收集的过程(主要依赖于工具类BeanDefinitionReader),将收集的信息组成BeanDefinition.将BeanDefinition注册到相应的BeaneanRegistry.
Bean实例化的过程在请求方通过容器的getBean方法明确请求某个对象时候触发/隐式依赖关系调用时候也会触发该动作。此阶段做的操作主要是判断当前的请求对象是否已经被实例化过了。根据情况进行注入。当该对象实现某些回调接口。也会根据回调函数接口装配它

容器的前置处理 BeanFactoryPostProcess:

此后内容主要是对于容器实现第一阶段进行处理。Spring提供了容器扩展机制BeanFactoryPostProcess。这个机制允许我们在实例化相应对象之前对注册到容器中的BeanDefinition的存储信息进行修改。可以根据这个机制对Bean增加其它信息。修改Bean定义的某些属性值。
想自定义前置处理器需要实现BeanFactoryPostProcess接口。当一个容器存在多种前置处理的时候,可以让前置处理器的实现类同时继承Ordered接口。
Spring容器提供了数种现成的前置处理器,常见的如:

  • PropertyPlaceholderConfigurer:允许在xml文件中使用占位符。将占位符代表的资源单独配置到简单的Properties文件中加载
  • PropertyOverrideConfigurer:不同于PropertyPlaceholderConfigurer的是,该类用于处理容器中的默认值覆为新值的场景
  • CustomEditorConfigurer:此前的两个前置处理器处理的均是BeanDefinition.通过把BeanDefinition的数据修改达到目的。CustomEditorConfigurer没有对BeanDefinition做任何变动。负责的是将后期会用到的信息注册到容器之中。例如将类型转换器注册到BeanDefinition中。供BeanDefinition将获取到的String类型参数转换为需要的类型。
装配前置处理器

装配前置处理器分为两种情况。一种是普通的BeanFactory.一种是ApplicationContext.对于ApplicationContext可以自动识别并装配前置处理器。
ApplicationContext的装配可以直接用xml文件实现:
配置文件:

   <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        	<property name="locations">
        		<list>
        			<value>propertyHolder.properties</value>
        		</list>
        	</property>
        </bean>

代码:

ApplicationContext factory=new ClassPathXmlApplicationContext("simple.xml");

启动的时候自动装载前置增强bean。无须额外操作。

BeanFactory装配方式:

		ConfigurableListableBeanFactory factory=new XmlBeanFactory(new ClassPathResource("simple.xml"));
		PropertyPlaceholderConfigurer configurer=new PropertyPlaceholderConfigurer();
		configurer.setLocation(new ClassPathResource("propertyHolder.properties"));
		configurer.postProcessBeanFactory(factory);
三种前置处理器
1.PropertyPlaceholderConfigurer前置处理器

应用场景:
不想将系统管理相关的业务配置信息混杂到XML文件中的时候,可以将文件配置到properties.如此可以在当系统参数发生变幻时候,只需修改properties配置文件。强化可读性的同时,也降低了维护难度。
代码:
配置文件

  <bean id="propertyHolder" class="com.example.demo.postprocess.MyPropertyHolderBean">
        	<property name="username">
        		<value>${java.version}</value>
        	</property>
        	<property name="password" value="${propertyHold
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring前置处理器是在Spring框架中用于在目标方法执行之前进行一些处理操作的组件。它们可以在方法调用前执行一些通用的逻辑,例如验证、日志记录、事务管理等。 在Spring中,前置处理器是通过实现 `org.springframework.aop.MethodBeforeAdvice` 接口来创建的。该接口定义了一个 `before` 方法,在目标方法执行之前会被调用。在该方法中,我们可以编写需要执行的逻辑代码。 下面是一个简单的示例,展示了如何创建一个前置处理器: ```java import org.springframework.aop.MethodBeforeAdvice; public class MyBeforeAdvice implements MethodBeforeAdvice { @Override public void before(Method method, Object[] args, Object target) throws Throwable { // 在目标方法执行前执行的逻辑 System.out.println("前置处理器:执行前置逻辑"); } } ``` 然后,我们需要将这个前置处理器配置到Spring容器中,并在需要应用该前置处理器的地方进行配置。例如,在使用Spring AOP时,可以通过配置切面来应用前置处理器: ```xml <aop:config> <aop:aspect ref="myBeforeAdvice"> <aop:before pointcut="execution(* com.example.MyService.*(..))" method="before" /> </aop:aspect> </aop:config> ``` 上述示例中,`com.example.MyService` 下的所有方法都会应用该前置处理器。 通过使用前置处理器,我们可以在方法执行前进行一些通用的处理操作,并且将这些逻辑与业务逻辑解耦,提高了代码的可维护性和复用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值