为什么Private Constructor可以工作,但Private Setter不在SPRING DI IOC中

时间:2016-10-23 16:28:37

标签: java spring dependency-injection inversion-of-control spring-bean

public class PrefixGenerator implements Generator {

    private String customDependency;

    private PrefixGenerator() {
        System.out.println("PrefixGenerator Instantiated");
    }

    private PrefixGenerator(int status) {
        System.out.println("PrefixGenerator with int arg Instantiated");
    }

    private void setCustomDependency(String customDependency) {
        this.customDependency = customDependency;
    }
}

在Xml Config下工作

<bean id="bean1" class="com.hike.pojo.PrefixGenerator">
<constructor-arg name="status" value="0"></constructor-arg>
</bean>

XML配置下方不起作用

<bean id="bean2" class="com.hike.pojo.PrefixGenerator">
<property name="customDependency" value="Hmm"></property>
</bean>

我知道,我们可以使用反射更改Private Access Specifier。
我的问题是为什么Spring设计如果Constructor是私有的,Spring DI工作 但如果Setter方法是私有的,那么Spring DI不起作用。
什么是春季设计师&#39;这个设计背后可能的动机?
当他们允许私人建筑师时,为什么他们不允许私人塞特犬?

1 个答案:

答案 0 :(得分:0)

Spring不需要了解您的私有数据成员,这就是不支持私有设置者的原因。

现在进入私有构造函数,就像你说的那样遵循单例设计模式。为了支持这个春天,你可以创建单例bean。

Spring完全基于反射。它遵循所有的设计原则,并赋予开发人员权力。