Spring在运行时选择Bean实现

我正在使用带有注释的Spring Bean,并且需要在运行时选择不同的实现。

@Service

public class MyService {

public void test(){...}

}

例如,我需要Windows平台,我需要MyServiceWin extending MyServiceLinux平台MyServiceLnx extending MyService

目前,我只知道一个可怕的解决方案:

@Service

public 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注入移动到配置中,如下所示:

@Configuration

public 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

回到顶部