【问题标题】:Creating bean aliases with Spring Boot使用 Spring Boot 创建 bean 别名
【发布时间】:2018-07-25 00:41:51
【问题描述】:

在 Spring XML 中,我可以使用 alias 元素为 bean 分配一个或多个别名。我想知道是否有 Spring Boot 编程方式来做同样的事情?

用例是我有需要 JMS TopicConnectionFactory 的遗留代码。使用 Spring Boot 的 ActiveMQ 自动配置,我会自动得到一个TopicConnectionFactory。但是,遗留代码使用静态字符串来查找 bean 名称,因此我需要创建一个别名,将遗留代码 bean 查找链接到 Spring Boot bean。

我曾尝试查看BeanDefinitionCustomizer,但它无法设置别名或 bean 名称。

【问题讨论】:

  • Google gives 对此有很好的结果。你有没有试过没有成功?
  • @lealceldeiro 链接的问题没有为此用例提供答案。具体来说,OP 最初没有定义实际的 bean;他正在尝试为 现有 bean 提供别名。
  • @lealceldeiro 如前所述,该 SO 文章不适用,因为我不控制 Bean 定义。是的,我试过谷歌但没有运气,因为他们都建议 XML 方法或 Bean 注释对我不起作用。
  • @Mike 好的,我刚刚撤回了我的欺骗性接近投票:)

标签: java spring spring-boot


【解决方案1】:

好的,事实证明,一旦您可以访问ConfigurableListableBeanFactory,就有办法做到这一点:

@Autowired
private ConfigurableListableBeanFactory beanFactory;

@Bean
public BeanPostProcessor jmsTopicConnFactoryAliasCreator()
{
  return new BeanPostProcessor()
  {
     @Override
     public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
     {
        if(bean instanceof TopicConnectionFactory)
        {
           beanFactory.registerAlias(beanName, "<LEGACY_BEAN_LOOKUP_NAME>");
        }
        return bean;
     }
  };
}

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 2023-02-09
    • 2015-02-25
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2018-10-27
    • 2020-06-05
    相关资源
    最近更新 更多