JavaConfig 中的 Spring Bean 别名

我有一个带注释的类,它提供了核心功能,我可以在所有项目中使用:@Service

@Service
public class MyService {}

另一个扩展它来实现项目特定的东西:

@Service
public class ExtendedMyService extends MyService {}

现在我想配置一个bean别名,以便在使用属性自动布线时能够使用:@Qualifier("MyServiceAlias")

# MyService qualifier (default: myService)
myService.qualifier=extendedMyService

在 XML 中,它看起来像:

<alias name="${myService.qualifier}" alias="MyServiceAlias" />

这里也讨论了它,但我需要在没有XML的情况下完成它,只有JavaConfig。是否可能以及如何实现?


答案 1

有一个开放的Jira:https://jira.spring.io/browse/SPR-6736

解决方法是在课堂上使用:@Bean@Configuration

@Configuration
public class AppConfig {

  @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" })
  public MyService myService() {}

}

答案 2

如果要使用占位符,另一种解决方法是使用@Value和Spring应用程序Context在@Configuration类中使用@Bean。

@Configuration
public class AppConfig {

    @Autowired
    private ApplicationContext context;

    @Bean
    public MyService myService(@Value("${myService.qualifier}") String qualifier) {
        return (MyService) context.getBean(qualifier);
    }
}

注意:必须特别考虑必须在开头加载的占位符bean(cf javadoc)


推荐