12

@Serviceすべてのプロジェクトで使用できるコア機能を提供する注釈付きクラスがあります。

@Service
public class MyService {}

プロジェクト固有のものを実装するためにそれを拡張する別のもの:

@Service
public class ExtendedMyService extends MyService {}

@Qualifier("MyServiceAlias")ここで、プロパティを使用して自動配線するときに使用できるように Bean エイリアスを構成したいと思います。

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

XML では次のようになります。

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

ここでも説明されていますが、XML を使用せずに JavaConfig のみで行う必要があります。それは可能で、どのように実現するのですか?

4

3 に答える 3

24

これにはオープンな Jira があります: https://jira.spring.io/browse/SPR-6736

@Bean回避策は、@Configurationクラスで使用することです:

@Configuration
public class AppConfig {

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

}
于 2014-11-24T15:25:59.337 に答える
3

プレースホルダーを使用する場合、別の回避策は、@Value と Spring applicationContext を使用して @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 については、特別な考慮が必要です ( javadocを参照) 。

于 2015-03-11T13:48:07.230 に答える