Spring Bean后处理器
Spring提供了两类后处理器
1.Bean后处理器
2.容器后处理器
Spring的很多功能就是通过这些后处理来提供高质量的服务。而程序员只需要简单几部同样可以自定义功能强大的后处理器,今天我们将简述Bean后处理器
一、Bean后处理器
用来加强Spring容器中的bean处理。可以在bean在spring容器中初始化前后对bean进行自定义处理。
1.自定义一个自定义一个bean后处理器:
public class MyBeanProcessor implements BeanPostProcessor{
@Override
public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {
System.out.println("bean:"+arg1+" after");
return arg0;
}
@Override
public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException{
System.out.println("bean:"+arg1+" before");
return arg0;
}
}
Bean后处理器要求实现接口BeanPostProcessor
该接口要求实现的两个方法:
Object postProcessBeforeInitialization(Object object,String name)
在bean初始化前Spring将回调该方法
参数:object 被后处理的bean
name 被后处理bean的id
返回:被处理后的bean
Object postProcessAfterInitialization(Object object,String name)
在bean初始化后Spring将回调该方法
参数:object 被后处理的bean
name 被后处理bean的id
返回:被处理后的bean
2.注册bean后处理器到容器
<!-- bean 后处理bean -->
<bean class="cn.zhaoyuening.utils.MyBeanProcessor"></bean>
Spring在初始化bean过程中如果发现bean实现了BeanPostProcessor 接口,将会将其注册为bean后处理器,它对spring容器下的所有bean起作用,任何bean在 初始化过程都会通过bean后处理器做额外增强操作。
3.后处理器在Bean初始化过程中调用的时机
4.接下来我们做一个小demo
创造一个Persion Bean:
public class Persion{
private String name;
private int age;
private char gender;
public void work(){
System.out.println(name+"working...");
}
public void init(){
System.out.println("persion bean 被初始化");
}
//省略若干get&set 方法
}
注册:
//声明初始化方法为init,在初始化进程始将被调用
<bean id="persion" class="cn.zhaoyuening.model.Persion" init-method="init"></bean>
创造Bean后处理器:
注册后Bean处理器:
<!-- bean 后处理bean -->
<bean class="cn.zhaoyuening.utils.MyBeanProcessor"></bean>
在此没有为后处理bean设置id值,因为当spring自动装载所有bean时发现某个bean 实现了BeanPostProcessor 接口将自动注册为后处理bean。
但如果不自动装载bean如使用(BeanFactory)需要设置id值,并手动注册:
<bean class="cn.zhaoyuening.utils.MyBeanProcessor" id=”processor”></bean>
BeanPostProcessor processor = (BeanPostProcessor)baenFactory.getBean(“processor”);
beanFactory.addBeanPostProcessor(processor);
执行:
private ApplicationContext beansContext = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void test() throws Exception {
Persion persion = beansContext.getBean("persion",Persion.class);
persion.work();
}
结果:
bean:persion before #执行bean后处理器的postProcessBeforeInitialization方法
persion bean 被初始化 #Bean 初始化
bean:persion after #执行bean后处理器的postProcessAfterInitialization方法
#执行persion bean的初始化方法,后处理器中设置name为了buynow
buynow working...
相关推荐
为了使Spring能够自动识别这个后处理器,通常需要将其配置为一个普通的bean,并且需要使用`ApplicationContext`作为容器,因为`BeanFactory`无法自动识别BeanFactoryPostProcessor。 #### 四、内置的容器后处理器 ...
spring Bean 后置处理器.pdf
例如,通过调整Bean的加载顺序,可以控制某些服务的初始化时机,或者通过后处理器增强Bean的功能。通过合理的配置和设计,我们可以充分利用Spring的IoC和DI特性,实现松耦合、易于测试和维护的代码。
Spring实战之Bean的后处理器操作示例 本文主要介绍了Spring实战之Bean的后处理器操作,结合实例形式详细分析了Bean的后处理器相关配置、操作方法及使用注意事项。 Bean的后处理器 在Spring框架中,Bean的后处理器...
#### Spring Bean 后处理器 Bean 后处理器是在 bean 被创建后对其进行自定义操作的一种机制。 - **示例**:实现 BeanPostProcessor 接口,并重写 postProcessBeforeInitialization 和 ...
4. **启动后处理器(BeanPostProcessor)**:这些是特殊类型的Bean,它们在所有常规Bean实例化之后,但初始化之前进行处理。它们的实例化顺序由`@Order`注解决定,或者通过实现`Ordered`接口来控制。 5. **...
2. Spring Bean后处理器:"139-框架篇-06-spring_refresh_06_注册bean后处理器"涉及的是Spring中的Bean后处理器,这是一种扩展点,允许在Bean实例化后、初始化之前或初始化之后进行额外的操作,比如属性注入、AOP...
1. BeanNameAware:当Bean实例化并设置了属性后,Spring会调用`setBeanName`方法,将Bean的名称传入,允许Bean知道自己的名字。 2. BeanFactoryAware:在`setBeanName`之后,Spring会调用`setBeanFactory`方法,将...
在Spring MVC框架中,配置请求的默认处理器是构建Web应用程序的关键步骤。这个过程涉及到设置DispatcherServlet,它作为Spring MVC的核心组件,负责调度HTTP请求到相应的控制器。以下将详细阐述Spring MVC配置请求的...
3. **编写Schema处理器**: 这个处理器是Spring的BeanDefinitionParser接口的实现,它负责解析自定义元素,并根据配置创建相应的BeanDefinition。例如,如果解析到`<myapp:service>`元素,处理器可以创建一个服务类的...
在`BeanFactory`创建Bean的过程中,Spring会遍历所有实现了`SmartInstantiationAwareBeanPostProcessor`的`BeanPostProcessor`,寻找能提供构造函数信息的处理器。 在`createBeanInstance`方法中,如果存在`...
此外,`@Autowired`注解的工作原理涉及`AutowiredAnnotationBeanPostProcessor`类,它是一个Bean后处理器,会在Bean实例化后进行处理,找到匹配的依赖并注入。 在开发中,Spring提供的各种工具如`BeanPostProcessor...
9. **Bean后处理器(Bean Post Processor)**: Bean后处理器允许在初始化Bean之后和销毁Bean之前执行自定义逻辑。通过实现`BeanPostProcessor`接口,我们可以自定义Bean的初始化和销毁行为。 10. **Resource注入**:...
在Spring框架中,`@Bean`注解是一个关键的组件,用于声明一个方法将返回的对象作为Spring容器中的bean。在`@Bean`中定义`initMethod`属性,可以指定该bean初始化时需要调用的方法。当`initMethod`被设置为异步执行,...
下面是添加Bean后置处理器后Bean的生命周期: 1. 通过构造器或工厂方法创建Bean实例。 2. 为Bean的属性设置值和对其他Bean的引用。 3. 将Bean实例传递给Bean后置处理器的postProcessBeforeInitialization()方法。 4...
5. 容器级处理:工厂后处理器在Bean实例化后和初始化之前进行处理,例如ConfigurationClassPostProcessor负责处理@Configuration类。 6. 正常服务:Bean现在准备就绪,可以被其他Bean使用,或者由应用程序代码直接...
总的来说,`MergedBeanDefinitionPostProcessor`是一个关键的组件,它在Spring容器中处理Bean定义的合并后阶段,通过不同的处理器对Bean定义进行增强,确保了如自动装配、初始化回调等特性能够正确地应用于Bean实例...
在Spring中,Bean的生命周期管理是非常重要的一个部分,Spring提供了一系列后处理器(BeanPostProcessor)接口,允许开发者在Bean初始化前后插入自定义逻辑。例如,AOP(面向切面编程)的实现就利用了这些后处理器。...
让 Spring 容器释放被 singleton 作用域 bean 占用资源的一种可行方式是,通过使用 bean 的后置处理器,该处理器持有要被清除的 bean 的引用。 3. Request 作用域 Request 作用域是指该针对每一次 HTTP 请求都会...