Spring在运行时选择Bean实现
我正在使用带有注释的Spring Bean,并且需要在运行时选择不同的实现。
@Servicepublic class MyService {
public void test(){...}
}
例如,我需要Windows平台,我需要MyServiceWin extending MyServiceLinux
平台MyServiceLnx extending MyService
。
目前,我只知道一个可怕的解决方案:
@Servicepublic class MyService {
private MyService impl;
@PostInit
public void init(){
if(windows) impl=new MyServiceWin();
else impl=new MyServiceLnx();
}
public void test(){
impl.test();
}
}
请考虑我仅使用注释,而不使用XML配置。
回答:
你可以将bean注入移动到配置中,如下所示:
@Configurationpublic class AppConfig {
@Bean
public MyService getMyService() {
if(windows) return new MyServiceWin();
else return new MyServiceLnx();
}
}
或者,你可以使用配置文件windows
和linux,然后使用@Profile
注释(如@Profile
("linux"
)或@Profile("windows")
)为服务实现添加注释,并为你的应用程序提供此配置文件之一。
以上是 Spring在运行时选择Bean实现 的全部内容, 来源链接: utcz.com/qa/414549.html