问题:
一个对象为单例,但依赖的对象为对象,此时,该依赖的对象变成单例
原因:
对象为单例,因此只实例化和初始化一次,因此该属性只被赋值一次,因此在该对象中,被依赖的对象始终为同一个对象
解决方法:
方法一:
继承ApplicationContextAware,使用applicationContext从容器中获取依赖
public class DepartmentService implements ApplicationContextAware{
@Autowired
DepartmentDao departmentDao;
ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationContext;
}
public Collection<Department> getDepartments(){
return applicationContext.getBean("departmentDao");
}
}
方法二:
使用@Lookup注解
public class DepartmentService {
@Autowired
DepartmentDao departmentDao;
@Lookup
public DepartmentDao getDepartmentDao(){
return null;
}
public Collection<Department> getDepartments(){
return getDepartmentDao().getDepartments();
}
}