首先通过示例来展示,如何在Spring中使用注解注入集合类(list、map、set等)
定义接口InjectService,继承InitializingBean接口,便于打印Spring注入的实例对象
public interface InjectService extends InitializingBean{
public void inject();
}
使用InjectServiceImpl实现InjectService接口
@Service
public class InjectServiceImpl implements InjectService {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("begin class:" + this);
}
@Override
public void inject() {
System.out.println("this is inject service");
}
}
在InjectController中注入list、map和set,类型为InjectService。分别打印list、map、set中存储的对象
@Controller
public class InjectController {
@Autowired
private List<InjectService> list;
@Autowired
private Map<String, InjectService> map;
@Autowired
private Set<InjectService> set;
@RequestMapping("inject.html")
public void injectUrl() {
for (InjectService service : list) {
System.out.println("inject list service class:" + service);
}
for (String key : map.keySet()) {
System.out.println("inject map service class:" + map.get(key));
}
for (InjectService service : set) {
System.out.println("inject map service class:" + service);
}
}
}
访问接口inject.html,输出结果如下:
begin class:com.spring.test.service.impl.InjectServiceImpl@10ee04df
inject list service class:com.spring.test.service.impl.InjectServiceImpl@10ee04df
inject map key value:injectServiceImpl
inject map service class:com.spring.test.service.impl.InjectServiceImpl@10ee04df
inject map service class:com.spring.test.service.impl.InjectServiceImpl@10ee04df
从返回的结果中可以看出:
- Spring在注入集合类的同时,会将集合泛型类的实例填入集合中,作为集合的初始值。
- 对于list、set填入的是注入类型Spring管理的实例,对于map,Spring会将service的名字作为key,对象作为value封装进入Map。