2017-04-21 3 views
0

Ich binFrühling Objekterstellung und @autowiring Anmerkung

kann ich verstehen springen, dass @Autowiring verwendet wird, um die object.I zu erstellen hat ein Beispielprojekt und Code wie diese

@Autowired 
private EmployeeManager employeeManager; 

gesehen, aber ich kann sehen, dass EmployeeManager eine Schnittstelle

public interface EmployeeManager { 
    public void addEmployee(EmployeeEntity employee); 
    public List<EmployeeEntity> getAllEmployees(); 
    public void deleteEmployee(Integer employeeId); 
} 

Aber in Java ist, können wir kein Objekt für die Schnittstelle erstellen right.So wie funktioniert das .Slightly Confused

Können Sie bitte erklären?

+4

Autowire erstellt nichts: Es weist Ihren Spring-Container an, eine Komponente des deklarierten Typs zu suchen und im markierten Feld festzulegen. Sie müssen immer noch die Implementierung schreiben und sie bei Spring registrieren. –

Antwort

1

Wenn Sie die Schnittstelle @Autowire aufrufen, sucht Spring nach der Bean, die mit der Autowired-Schnittstelle zugeordnet ist, und instanziiert (creates a singleton instance) die konkrete Klasse/Implementierung entsprechend. Diese Beans sind in Ihrer Servlet-Konfiguration definiert, ob über XML oder Java-Code.

2

Sie müssen eine Implementierung für diese Klasse bereitstellen. Nehmen wir "EmployeeManagerImpl". Also, wenn der Frühling die Aussage findet,

@Autowired 
private EmployeeManager employeeManager; 

Es sieht im Frühjahr Kontext und sieht, wenn Sie irgendwelche Bohnen definiert haben (von Beton-Typ), die vom Typ EmployeeManager ist. Wenn genau eine Bean dieses Typs gefunden wird, nimmt sie diese Bean und legt sie in der Eigenschaft employeeManager ab.

Wenn wir das Definieren von Beans sagen, gibt es zwei Möglichkeiten, dies zu tun.

Entweder die xml Weise

<bean class = "org.sample.EmployeeManagerImpl /> 

Oder die Anmerkung Weise

@Component 
public class EmployeeManagerImpl { 
} 

Während app starten, findet Frühjahr alle XML-Dateien und scannt alle Klassen für @Component Anmerkungen erstellt der Bohnen und speichert sie im Frühling Kontext. Als Teil dieses Starts, wenn es auf eine Klasse trifft (die übrigens eine Bean sein soll), die eine AutoWire-Annotation hat, versucht sie, eine Bean (die nichts anderes als eine Instanz einer Klasse ist) in diese Eigenschaft zu injizieren.

Verwandte Themen