Springframework:通过xml配置基础架构bean

时间:2014-01-30 16:49:47

标签: java xml spring spring-aop

我们需要将bean配置为基础结构bean BeanDefinition.ROLE_INFRASTRUCTURE,以便InfrastructureAdvisorAutoProxyCreator考虑它。

但是我们找不到通过xml配置bean角色的方法。

目前我们有bean实现BeanFactoryAware,然后在setBeanFactory中设置角色,如下所示:

    ConfigurableListableBeanFactory configurableListableBeanFactory = (ConfigurableListableBeanFactory) beanFactory;
    AbstractBeanDefinition beanDefinition = (AbstractBeanDefinition) configurableListableBeanFactory.getBeanDefinition("hibernateSessionAnnotationAdvisor");
    beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);

这显然不是很好,我们宁愿通过xml。

这样做

即使我们的bean是通过xml配置的,有没有办法使用@Role注释?

1 个答案:

答案 0 :(得分:4)

您可以使用BeanFactoryPostProcessor并配置要更改的bean名称(或类型)。

例如:

public class RoleBeanDefinitionConfigurer implements BeanDefinitionRegistryPostProcessor {

    private String[] beanNames;

    @Override
    public void postProcessBeanFactory(
            ConfigurableListableBeanFactory beanFactory) throws BeansException {

    }

    @Override
    public void postProcessBeanDefinitionRegistry(
            BeanDefinitionRegistry registry) throws BeansException {

        if (beanNames == null)
            return;

        for (String name : beanNames) {
            if (registry.containsBeanDefinition(name))
                ((AbstractBeanDefinition) registry.getBeanDefinition(name)).setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
        }
    }

    public String[] getBeanNames() {
        return beanNames;
    }

    public void setBeanNames(String[] beanNames) {
        this.beanNames = beanNames;
    }

}