请考虑以下两类: 使用factory.getbean()创建bean A时,会创建该bean,但尽管初始化为新的哈希图,属性coldata为null。
@Component
@Scope("prototype")
public class A{
private Map<String, Map<String,String>> coldata = new HashMap<String, Map<String,String>>();
}
@Service
public class B{
@Autowired
private BeanFactory factory;
public void test(){
A a= (A)factory.getBean("A");
System.out.println(a.coldata)
}
}
答案 0 :(得分:0)
起初有一种错误的纠正方法。
首先,如@Sun所说:更正代码并使该地图公开,或至少使该字段具有吸气剂。
第二 如果使用自动装配,请不要使用beanFactory: A类被标注为自动装配和组件。如果要从容器中获取该类的实例,只需在B类中使用自动装配的实例:
@Service
public class B{
@Autowired
private A a;
public void test(){
System.out.println(a.coldata)
}
}
避免使用BeanFactory / ApplicationContext类的getBean方法,尤其是要使用自动装配时。 关于为什么应避免使用该方法,这是一个很好的解释: Why is Spring's ApplicationContext.getBean considered bad?