使用BeanFactory.getBean()创建Spring bean

时间:2018-08-14 10:12:56

标签: java spring

请考虑以下两类: 使用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)
    }
}

1 个答案:

答案 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?