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 楼答案
Spring不需要知道您的私有数据成员,这就是为什么不支持私有setter
现在来看私有构造函数,正如您所说,它遵循单例设计模式。为了支持这个spring,您可以创建单例bean
春天完全基于反射。它遵循所有的设计原则,并赋予开发者权力