2017-02-15 4 views
0

Ich bin neu im Frühling. Ich versuche TestDAO ohne Setter-Methode zu starten. Aber ich habe es versäumt, autowire.Frühling Autowire ohne Setzer Methode

System.out.println ("TestClass.testDAO" + testDAO); Es gibt null zurück.

Bitte helfen Sie mir zu entsperren.

Meine xml config:

<context:component-scan base-package="com.test" /> 
<context:annotation-config/> 

<bean id="testClass" class="com.test.TestClass" autowire="byName"> 
</bean> 

Java-Klassen:

@Component 
public class TestClass { 

    @Autowired(required=true) 
    public TestDAO testDAO = null; 
    { 
     System.out.println("TestClass.testDAO "+testDAO); 
    } 
} 

@Repository 
public class TestDAO{ 
} 
+2

Natürlich wird es zurückgeben 'null' an diesem Punkt. Der Initialisierer ist Teil des Konstruktors, spring kann nur Abhängigkeiten nach dem Konstruktor einfügen, der das Objekt konstruiert hat. Also ja, zu diesem Zeitpunkt ist es immer noch 'null', weil es danach injiziert wird. –

+0

Danke Deinum. Ich kann keine Idee bekommen .. Kannst du bitte helfen, meinen Code zu korrigieren .. Wirklich ich kämpfe. – DEADEND

+0

Wie kann der Frühling etwas in ein Objekt injizieren, das nicht existiert? Wie machst du das? Wie im Initialisiererblock angegeben, wird der Teil zwischen '{}' in den Konstruktor kopiert ... An diesem Punkt ist er immernoch null ... Wie bereits erwähnt, erfolgt die Injektion NACHDEM Sie '@ Autowired' Felder in einem Konstruktor nicht verwenden können. –

Antwort

1

Hier ist ein Beispiel, wie Sie den Code zu beheben:

@Component 
public class TestClass { 

    @Autowired(required=true) 
    public TestDAO testDAO; 

    // When someone calls this method, the testDao component should 
    // be initialized with TestDAO instance. 
    public void someMethod(){ 
    System.out.println("TestClass.testDAO "+testDAO); 
    } 
} 

public interface TestDAO extends JpaRepository<MyEntity, Long>{ 
} 
Auch

, könnten Sie die @Autowired Anmerkung verwenden in einem Konstruktor.

@Component 
public class TestClass { 

    public TestDAO testDAO; 

    @Autowired 
    public TestClass(TestDAO testDAO){ 
    this.testDAO = testDAO; 
    System.out.println("TestClass.testDAO "+testDAO); 
    } 
} 

Hoffe, dass es hilft,

+0

Konnten Sie Ihr Problem mit dieser Lösung lösen? – jcgarcia

+0

Ja jcgarcia .. Danke für Ihre Hilfe. – DEADEND

+0

Froh, das zu hören! :) – jcgarcia

Verwandte Themen