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

Below Xml Config arbeitetWarum Private Constructor funktioniert, aber Privat Setter nicht in SPRING DI IOC

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

Unter XML-Konfigurations nicht

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

funktionierts ich weiß, können wir Privat ändern Zugriffsspezifizierer mit Reflektion.
Meine Frage ist Warum ist Spring So entworfen, dass, wenn Konstruktor privat ist, Spring DI funktioniert, aber wenn Setter-Methode privat ist, funktioniert Spring DI nicht.
Was könnte Spring Designers Motiv hinter diesem Design sein?
Warum konnten sie private Setzer nicht zulassen, wenn sie privaten Konstrukteuren erlaubten?

+0

Konstruktoren sollten nicht in erster Linie privat sein. Private Setter machen jedoch absolut keinen Sinn. Sie würden einfach als private Methoden behandelt werden. – Charles

+0

@ c650 Warum sollten Konstruktoren nicht privat sein? – Kayaman

+0

@Kayaman Da sollte derjenige, der eine Instanz erstellt, Zugriff auf den Konstruktor haben. Im Allgemeinen sollten Ihre Konstruktoren nicht privat sein, es sei denn Ihre Klasse ist. – Charles

Antwort

0

Spring muss nicht über Ihr privates Datenelement informiert sein, deshalb werden private Setter nicht unterstützt.

Kommen wir nun zum privaten Konstruktor, wie Sie gesagt haben, folgt er den Singleton Design Patterns. Um diese Feder zu unterstützen, können Sie Singleton-Bohnen erstellen.

Die Feder basiert vollständig auf Reflexion. Es folgt dem gesamten Konstruktionsprinzip und gibt dem Entwickler die Kraft.