一个回调接口有多种回调逻辑,在项目启动时需要将回调接口的实现类都放到一个list中然后回调每个实现类的具体方法。在Springboot中就可以通过@Autowired来将回调接口的所有实现类进行注入。
Demo
回调接口: ServiceTest
public interface ServiceTest {
public String getName();
}
实现类1
@Component
public class ServiceTestImpl1 implements ServiceTest {
@Override
public String getName() {
return "ServiceTestImpl1";
}
}
实现类2
@Component
public class ServiceTestImpl2 implements ServiceTest {
@Override
public String getName() {
return "ServiceTestImpl2";
}
}
实现类3
@Component
public class ServiceTestImpl3 implements ServiceTest {
@Override
public String getName() {
return "ServiceTestImpl3";
}
}
测试类
@Component
public class Test implements InitializingBean {
@Autowired
private List<ServiceTest> serviceTests;
public String serviceTest() {
StringBuffer sb = new StringBuffer();
for (ServiceTest serviceTest : serviceTests) {
sb.append(serviceTest.getName());
sb.append(" ");
}
return sb.toString();
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(serviceTest());
}
}
输出
ServiceTestImpl1 ServiceTestImpl2 ServiceTestImpl3
这是Spring的一个特殊的注入功能
当注入一个Map的时候 ,value泛型为T,则注入后Spring会将实例化后的bean放入value ,key则为注入后bean的名字
当注入一个List的时候,List的泛型为T,则注入后Spring会将实例化的bean放入List中
定义一个接口
public interface UserService {
}
两个实现类
@Service("beijing")
public class BeijingUserServiceImpl implements UserService{
}
@Service("shanghai")
public class ShanghaiServiceImpl implements UserService {
}
测试类
@Autowired
Map<String, UserService> map ;
@Autowired
List<UserService> list;
public void test(){
for (Map.Entry m : map.entrySet()){
System.out.println("key : " + m.getKey()+" =value:" + m.getValue());
}
for (Map.Entry m : map.entrySet()){
System.out.println("key : " + m.getKey()+"; value:" + m.getValue());
}
list.stream().forEach(l ->{
System.out.println(l.toString());
});
}
打印结果:
key : beijing; value:com.test.controller.BeijingUserServiceImpl@188c5d23
key : shanghai; value:com.test.controller.ShanghaiServiceImpl@183e329d
com.test.controller.BeijingUserServiceImpl@188c5d23
com.test.controller.ShanghaiServiceImpl@183e329d
注入map的使用场景:
完成简单版的策略模式,在map中取得不同的实现类,调用相应的方法