代码可能这样
public class handler {
void handler(String param){
if('A'.equals(param)){
ATestService.do();
}else if('B'.equals(param){
BTestService.do();
}
}
}
@Autowired
用法
@Autowired 官方文档
private Map<String, MovieCatalog> movieCatalogs;
@Autowired
public void setMovieCatalogs(Map<String, MovieCatalog> movieCatalogs) {
this.movieCatalogs = movieCatalogs;
}
// ...
利用这种方式的自动注入,可以将同一个接口的实现bean
,注入Map
,Map
的key
为Bean
的名称name
,value
为该bean
。
干掉 else if
// 接口
public interface TestService {
void do();
}
// 实现 bean A
@Service("A")
public class ATestServiceImpl Impl TestService{
void do(){
...
}
}
// 实现 bean B
@Service("B")
public class BTestServiceImpl Impl TestService{
void do(){
...
}
}
@Component
public class handler {
@Autowired(required = false)
private Map<String, TestService> services = Maps.newHashMap();
void handler(String beanName) {
TestService service = services.get(beanName);
service.do();
}
}
其他
当然也可以用其他的方法获取bean
来进行解耦,例如继承ApplicationContextAware
,通过ApplicationContext#getBeansOfType
方法获取bean
集合
网友评论