天天看點

Springboot根據配置檔案動态注入接口實作類

最近接到一個需求,産品的使用者子產品要接入第三方使用者系統(skyview),但是又不能影響原有的登入子產品,并且需要通過配置檔案來決定使用平台的使用者系統還是第三方使用者系統。

原先的使用者子產品已經開發好了,接口也設計好了,是以隻需要再開發第三方使用者系統的接口實作就好了。

使用者接口:

public interface UserService {
    String login();
}      

平台使用者接口實作:

@Service("UserServiceImpl")
public class UserServiceImpl implements UserService {

    @Override
    public String login() {
        return "zeus";
    }
}      

第三方平台接口實作:

@Service("skyviewUserServiceImpl")
public class SkyviewUserServiceImpl implements UserService {

    @Override
    public String login() {
        return "skyview";
    }

}      

功能已經開發好了,問題是如何在Controller層動态決定使用那個實作類?

@RequestMapping("/user")
@RestController
public class UserController {

    @Resource(name=  "${system.usercenter}UserServiceImpl")
    private UserService userService;

    @GetMapping("/login")
    public String login(){
        return userService.login();
    }

}      
server:
  port: 8081

system:
  usercenter: skyview