gpt4 book ai didi

java - Spring 框架 : Configure infrastructure bean via xml

转载 作者:行者123 更新时间:2023-11-29 03:25:03 26 4
gpt4 key购买 nike

我们需要将一个 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 注释的方法?

最佳答案

您可以使用 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;
}

}

关于java - Spring 框架 : Configure infrastructure bean via xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21462504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com