有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么私有构造函数可以工作而私有Setter不能在SPRING DI IOC中工作

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配置的工作原理

<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>

我知道,我们可以使用反射更改私有访问说明符
我的问题是,为什么Spring设计得如此之好,以至于如果构造函数是私有的,Spring DI就可以工作 但若Setter方法是私有的,SpringDI就不能工作。
这种设计背后的弹簧设计师可能的动机是什么?
为什么他们允许私有构造函数时却不能允许私有setter


共 (1) 个答案

  1. # 1 楼答案

    Spring不需要知道您的私有数据成员,这就是为什么不支持私有setter

    现在来看私有构造函数,正如您所说,它遵循单例设计模式。为了支持这个spring,您可以创建单例bean

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