Java 如何自检SpringBean范围?

Java 如何自检SpringBean范围?,java,spring,Java,Spring,我的项目提供了许多基类(NuuUumbeeeer),开发人员可以扩展这些基类,并将它们声明为Springbean到XML配置中 我已经知道,注释配置是从基类继承的,但我们主要使用XML @SpringAnnotation public abstract class Parent{} //Will apply any @SpringAnnotation public class Child{} 我要做的是在基类中进行自检。如果开发人员忘记将bean的作用域设置为文档化的值(在当前示例中为“re

我的项目提供了许多基类(NuuUumbeeeer),开发人员可以扩展这些基类,并将它们声明为Springbean到XML配置中

我已经知道,注释配置是从基类继承的,但我们主要使用XML

@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

        }
    }
}