2017-12-26 12 views
0

verwendet, so lese ich über die Dependency Injection zum ersten Mal. Ich denke, ich habe es herausgefunden und ich habe ein Beispiel für PHP verstanden. Obwohl ich dieses JAVA-Tutorial gelesen habe, besteht es darauf, Anmerkungen hinzuzufügen. Wenn ich der Klasse ihre Abhängigkeit extern z. B. mit Hilfe des Konstruktors anbiete, warum sind dann die Anmerkungen erforderlich? Außerdem lese ich auf dem Spring-Framework, das auch angibt, dass Sie Anmerkungen benötigen. Wie passen die Anmerkungen zusammen? Jede Information wird geschätzt.Warum werden Anmerkungen mit Java auf Dependency Injection

+1

Können Sie einige Code Beispiel schreiben, wie DI wie ohne Annotation in Java aussehen sollte? –

+0

Nicht sicher, ob das das ist, aber ich weiß, dass Anmerkungen durch Reflexion erkannt werden können. Und wenn Sie in ein Jar laden, können Sie alle Klassen durchlaufen und dort nach Methoden suchen, um festzustellen, ob sie eine bestimmte Annotation haben. –

+0

Verstehst du, warum Annotationen im Allgemeinen sind? (Und seit 4.3 benötigt Spring _doesnot_ keine Annotation für die Konstruktorinjektion, obwohl Sie ihm immer noch mitteilen müssen, dass Sie eine Bean einer bestimmten Klasse haben wollen.) – chrylis

Antwort

2

was, warum die Anmerkungen erforderlich?

Das ist Ihnen überlassen, ob Sie eine XML-Konfiguration oder Anmerkungen möchten. Spring verwendet Annotationen als Alternative zu XML für die deklarative Konfiguration.

Nehmen wir Ihr Beispiel, Sie möchten Abhängigkeit durch Konstruktor übergeben.
Das Abteilungsobjekt hat für die Erstellung eine Abhängigkeit vom Employee-Objekt.
Mitarbeiterobjekt hat zwei Attribute ID und Name.

  1. Mithilfe von Annotation, wie können Sie es tun?

    @Configuration 
    @ComponentScan("com.example.spring") 
    public class Config { 
    
        @Bean 
    public Employee employee() { 
        return new Employee("1", "John"); 
    } 
    } 
    

Jetzt Stellungs-Abteilung Objekt:

@Component 
public class Department { 

    @Autowired 
    public Department (Employee employee) { 
     this.employee= employee; 

    } 
} 
  1. von XML:

    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
    
    <bean id="department" class="com.example.spring.Department"> 
        <constructor-arg index="0" ref="employee"/> 
    </bean> 
    
    <bean id="employee" class="com.example.spring.Employee"> 
        <constructor-arg index="0" value="1"/> 
        <constructor-arg index="1" value="John"/> 
    </bean> 
    

  2. Durch die Verwendung von Java: Sie etwas tun können, wie

    Employee employee=new Employee("1","John"); 
    Department dept=new Department(employee); 
    

Punkt ist, es ist up-to Sie, wie Sie wollen die Dinge zu tun.

Haben Sie einen Blick auf diese Frage Xml configuration versus Annotation based configuration