Spring BootでのInjectionについて
Springで作成したソースを、Spring Bootで動作させるための作業を行っています。
下記のようなソースがあった場合、Springではapplication-config.xmlに、
<beans>
<bean id="testService" class="test.service.impl.TestServiceAImpl" />
</beans>
と、記述して利用するクラスを決定していましたが、Spring Bootの場合はどのように設定すれば良いのか分かりませんでした。
application.propertiesに何らかの記述を行うことで、クラスを決定できればと思いますが、どのような記述が必要でしょうか?
よろしくお願いします。
test.controller
└TestController.java
test.service
└TestService.java (インターフェイス)
test.service.impl
└TestServiceAImpl.java (TestServiceインターフェイス実装クラスA)
└TestServiceBImpl.java (TestServiceインターフェイス実装クラスB)
TestController.java抜粋
@Autowired
private TestService testService;
コメントだけではフォローしきれませんでしたので、コメントを受けて修正したコードを記載します。
クラス構成及びTestController.java、TestService.javaには変更がありません。
TestServiceAImpl.java抜粋
@Service //@Componentの方が良い?
@Profile("TestServiceA") // 追加
public class TestServiceAImpl implements TestService
TestServiceBImpl.java抜粋
@Service //@Componentの方が良い?
@Profile("TestServiceB") // 追加
public class TestServiceBImpl implements TestService
application.properties抜粋
spring.profiles.active=TestServiceA // 追加
上記で、当初期待していた挙動を得ることができました、コメント頂ありがとうございます。
なお、コメント頂いたとおりConfigurationクラスを追加することも検討しましたが、その場合ConfigurationクラスのtestServiceA(spring.profiles.active=Aとした場合)、TestServiceAImpl、TestServiceBImplを候補としてNoUniqueBeanDefinitionExceptionがスローされてしまったため、上記の通りとなりました。