Springboot根据配置文件动态注入接口实现类
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层动态决定使用那个实现类?
通过@Qualifier和@Resource都可以指定接口的实现类,不同的是,@Qualifier注解的参数必须是常量,而@Resource注解的参数可以加入变量,变量可以在配置文件中配置。
@RequestMapping("/user")
@RestController
public class UserController {
@Resource(name= "${system.usercenter}UserServiceImpl")
private UserService userService;
@GetMapping("/login")
public String login(){
return userService.login();
}
}
application.yaml
server:
port: 8081
system:
usercenter: skyview
更多推荐
已为社区贡献17条内容
所有评论(0)