

Springで作成したソースを、Spring Bootで動作させるための作業を行っています。

下記のようなソースがあった場合、Springではapplication-config.xmlに、

[code]

    <beans>
        <bean id="testService" class="test.service.impl.TestServiceAImpl" />
    </beans>
    
[/code]

と、記述して利用するクラスを決定していましたが、Spring Bootの場合はどのように設定すれば良いのか分かりませんでした。  
application.propertiesに何らかの記述を行うことで、クラスを決定できればと思いますが、どのような記述が必要でしょうか？  
よろしくお願いします。

> test.controller  
>  └TestController.java  
>  test.service  
>  └TestService.java (インターフェイス)  
>  test.service.impl  
>  └TestServiceAImpl.java （TestServiceインターフェイス実装クラスＡ)  
>  └TestServiceBImpl.java （TestServiceインターフェイス実装クラスＢ)

TestController.java抜粋

[code]

    @Autowired
    private TestService testService;
    
[/code]

* * *

  
コメントだけではフォローしきれませんでしたので、コメントを受けて修正したコードを記載します。  
クラス構成及びTestController.java、TestService.javaには変更がありません。

TestServiceAImpl.java抜粋

[code]

    @Service　　//@Componentの方が良い？
    @Profile("TestServiceA")　　// 追加
    public class TestServiceAImpl implements TestService
    
[/code]

TestServiceBImpl.java抜粋

[code]

    @Service　　//@Componentの方が良い？
    @Profile("TestServiceB")　　// 追加
    public class TestServiceBImpl implements TestService
    
[/code]

application.properties抜粋

[code]

    spring.profiles.active=TestServiceA　　// 追加
    
[/code]

上記で、当初期待していた挙動を得ることができました、コメント頂ありがとうございます。

なお、コメント頂いたとおりConfigurationクラスを追加することも検討しましたが、その場合ConfigurationクラスのtestServiceA（spring.profiles.active=Aとした場合）、TestServiceAImpl、TestServiceBImplを候補としてNoUniqueBeanDefinitionExceptionがスローされてしまったため、上記の通りとなりました。


CC BY-SA 3.0
2015-07-22T04:01:58.670
12561
2015-10-21T09:35:06.810
2015-07-23T06:32:26.543
10623
10623
question
spring
Spring BootでのInjectionについて

[code]

    @Configuration
    public class AppConfig {
      @Bean TestService testService() {
        return new TestServiceImpl();
      }
    }
    
[/code]

なクラスをコンポーネントスキャン配下においてください。メソッド名がbean idになります


CC BY-SA 3.0
2015-07-22T09:49:06.717
12573
2015-07-23T01:10:48.593
2015-07-23T01:10:48.593
3542
3542
12561
answer