- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
在此系列文章中,我总结了Spring几乎所有的扩展接口,以及各个扩展点的使用场景。并整理出一个bean在spring中从被加载到最终初始化的所有可扩展点的顺序调用图。这样,我们也可以看到bean是如何一步步加载到spring容器中的.
public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor { void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry var1) throws BeansException; }
BeanDefinitionRegistryPostProcessor为容器级后置处理器。 容器级的后置处理器会在Spring容器初始化后、刷新前执行一次 。还有一类为Bean级后置处理器,在每一个Bean实例化前后都会执行.
通常,BeanDefinitionRegistryPostProcessor用于在bean解析后实例化之前通过BeanDefinitionRegistry对BeanDefintion进行增删改查.
常见如mybatis的Mapper接口注入就是实现的此接口.
下面是一个示例,展示了如何实现动态的给spring容器添加一个Bean:
public class User {
String name;
String password;
}
import org.springframework.beans.BeansException;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
@Component
public class DynamicBeanRegistration implements BeanDefinitionRegistryPostProcessor, Ordered {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanRegistry) throws BeansException {
RootBeanDefinition beanDefinition = new RootBeanDefinition();
beanDefinition.setBeanClass(User.class);
MutablePropertyValues propertyValues = new MutablePropertyValues();
PropertyValue propertyValue1 = new PropertyValue("name", "张三");
PropertyValue propertyValue2 = new PropertyValue("password", "123456");
propertyValues.addPropertyValue(propertyValue1);
propertyValues.addPropertyValue(propertyValue2);
beanDefinition.setPropertyValues(propertyValues);
beanRegistry.registerBeanDefinition("user", beanDefinition);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
BeanDefinition beanDefinition = beanFactory.getBeanDefinition("user");
System.out.println(beanDefinition.getBeanClassName());
User user = beanFactory.getBean(User.class);
System.out.println(user.getName());
System.out.println(user.getPassword());
}
@Override
public int getOrder() {
return 0;
}
}
输出:
com.sandy.springex.beanfefinitionregistrypostprocessor.User
张三
123456
该代码通过实现BeanDefinitionRegistryPostProcessor接口,在Spring容器启动时动态注册了一个名为"user"的Bean,并设置了其name和password属性的值。在后续的BeanFactory初始化过程中,可以通过beanFactory获取到该动态注册的Bean,并访问其属性值.
当容器中有多个BeanDefinitionRegistryPostProcessor的时候,可以通过实现Ordered接口来指定顺序:
@Override
public int getOrder() {
return 0; //值越小,优先级越高
}
最后此篇关于Spring扩展接口(2):BeanDefinitionRegistryPostProcessor的文章就讲到这里了,如果你想了解更多关于Spring扩展接口(2):BeanDefinitionRegistryPostProcessor的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在此系列文章中,我总结了Spring几乎所有的扩展接口,以及各个扩展点的使用场景。并整理出一个bean在spring中从被加载到最终初始化的所有可扩展点的顺序调用图。这样,我们也可以看到bean是如
我的用例处理动态创建 bean。我发现它们是注册 bean 定义的两个选项:ImportBeanDefinitionRegistrar和 BeanDefinitionRegistryPostProce
如何访问由 加载的属性在BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry . 我无法使用带有 @Value
如何访问 BeanDefinitionRegistryPostProcessor (BDRPP) 内部的 ApplicationContext?我有以下 BDRPP。 public class MyC
我正在尝试使用 BeanDefinitionRegistryPostProcessor 动态创建 N 个 bean .基于 this问题,我选择使用 BeanDefinitionRegistryPos
假设我有这个@Configuration类: @Configuration public class SomeConfig{ @Bean public MyBean myBean(){
我正在动态创建 spring bean(使用: https://scanningpages.wordpress.com/2017/07/28/spring-dynamic-beans/ 中描述的方法)
我是一名优秀的程序员,十分优秀!