2016-05-01 8 views
0

Ich fange gerade an, das Springframework zu lernen, und ich bin nur neugierig darauf, wie der Frühling eine Bohne zur privaten Variable einer anderen Bohne verdrahtet, die keine setzenden Methoden hat. Zum Beispiel habe ich eine DependentBean, die zu einem DependedBean abhängen ...Wie springt Spring Boot automatisch zu einer anderen Klasse ohne Zugriffsmethode auf das private Attribut?

@Component 
public class DependentBean { 
    @Autowired 
    private DependedBean dependedBean; //this class has no "setDependedBean" setter method.. 
} 

und für die DependedBean ...

@Component 
public class DependedBean{ 
    ... 
} 

Wenn die Feder Boot-Anwendung gestartet wird, kann es die dependedBean von die DependentBean, selbst wenn das DependentBean-Objekt keine Setter-Methode zum Festlegen seines dependedBean-Attributs besitzt. Wie macht der Frühling das? Ich bin nur neugierig ...

+0

Ihre Formulierung ist seltsam - 'private' ist ein Zugriffsmodifikator,' setDependendBean' ist eine Accessormethode oder ein Setter. –

+0

Entschuldigung, ich werde die Frage bearbeiten ... – Paul

Antwort

1

Reflexion. Viele Abhängigkeitsinjektions-Frameworks verwenden Reflektion, um Klassen zur Laufzeit zu verarbeiten und ihr Verhalten zu ändern.

Class#getDeclaredFields() gibt ein Array von, nun, alle deklarierten Felder in der Klasse zurück (umhüllt von Field API), einschließlich privater. Field API ermöglicht es Ihnen, Anmerkungen (isAnnotationPresent, getAnnotation, getAnnotations) zu überprüfen und seinen aktuellen Wert (set(Object, Object)) einzustellen.

2

In Java können Sie Reflexionen verwenden, um auf private Felder einer Klasse zuzugreifen. Siehe this Stack Overflow question für weitere Details, wie das gemacht werden kann.

Verwandte Themen