Java 如何自检SpringBean范围?
我的项目提供了许多基类(NuuUumbeeeer),开发人员可以扩展这些基类,并将它们声明为Springbean到XML配置中 我已经知道,注释配置是从基类继承的,但我们主要使用XMLJava 如何自检SpringBean范围?,java,spring,Java,Spring,我的项目提供了许多基类(NuuUumbeeeer),开发人员可以扩展这些基类,并将它们声明为Springbean到XML配置中 我已经知道,注释配置是从基类继承的,但我们主要使用XML @SpringAnnotation public abstract class Parent{} //Will apply any @SpringAnnotation public class Child{} 我要做的是在基类中进行自检。如果开发人员忘记将bean的作用域设置为文档化的值(在当前示例中为“re
@SpringAnnotation
public abstract class Parent{}
//Will apply any @SpringAnnotation
public class Child{}
我要做的是在基类中进行自检。如果开发人员忘记将bean的作用域设置为文档化的值(在当前示例中为“request”),我希望继承的bean抛出异常,提醒开发人员更改作用域
例如
我已经看到Spring没有定义任何类型的BeanDefinitionAware
,它可能会将bean自己的定义(以及范围和很多东西)注入bean本身
有什么想法吗?我可能很快会带来一个自制的解决方案。您可以定义一个bean来实现
BeanFactoryPostProcessor
接口
如中所述,当所有bean定义都已加载,但尚未实例化任何bean时,将调用实现BeanFactoryPostProcessor
的bean。通过这种方式,您将能够读取所有bean定义,并检查bean是否正确配置
这是一个例子:
public class CustomBeanFactory implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
for (String beanName : beanFactory.getBeanDefinitionNames()) {
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
// Analyze the bean definition
}
}
}
最后但并非最不重要的一点是,请记住,
BeanFactoryPostProcessor
可以与bean定义交互并修改bean定义,但决不能与bean实例交互。这样做可能会导致过早的bean实例化,违反容器并导致意外的副作用。如果需要bean实例交互,请考虑执行<代码> BeaPasePuthor 。这很酷。我可以分析扩展基类的类的bean。我还考虑(通过BeanPostProcessor
)实现我自己的BeanDefinitionAware
。事实上,似乎有很多方法
public class CustomBeanFactory implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
for (String beanName : beanFactory.getBeanDefinitionNames()) {
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
// Analyze the bean definition
}
}
}