0
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 работаетПочему частные Конструкторы работает, но Частный сеттер не в SPRING DI МОК

<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 не работает.
Что может быть возможным мотивом Spring Designers за этот дизайн?
Почему они не разрешают приватным сеттерам, когда им разрешен частный конструктор?

+0

Конструкторы не должны быть частными в первую очередь. Частные сеттеры, однако, не имеют абсолютно никакого смысла. Их рассматривали бы просто как частные методы. – Charles

+0

@ c650 Почему конструкторы не должны быть частными? – Kayaman

+0

@ Кайаман. Тот, кто создает экземпляр, должен иметь доступ к конструктору. В общем случае ваши конструкторы не должны быть закрытыми, если только ваш класс не является. – Charles

ответ

0

Весна не обязательно должна знать о вашем персональном члене данных, поэтому частные сеттеры не поддерживаются.

Теперь, перейдя к частному конструктору, как вы сказали, он следует шаблонам проектирования синглтона. Чтобы поддержать эту весну, вы можете создавать одноэлементные бобы.

Весна полностью основана на отражении. Он следует всем принципам проектирования и дает разработчику возможность.