2017-02-15 3 views
0

私は春の新作です。私はsetterメソッドなしでTestDAOをautowireしようとしています。しかし私はautowireに失敗しました。セッターのない春のオートワイヤー

System.out.println( "TestClass.testDAO" + testDAO); nullを返します。

ロックを解除するのを手伝ってください。

私のXML設定:

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

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

Javaクラス:

@Component 
public class TestClass { 

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

@Repository 
public class TestDAO{ 
} 
+2

、それがお役に立てば幸いです。初期化子はコンストラクタの一部であり、コンストラクタがオブジェクトを構築した後にのみスプリングは依存性を注入できます。その時点でそれはそうです。それはそれが後に注入されるので、それはまだ「ヌル」です。 –

+0

ありがとうDeinum。私は考えを得ることができません..あなたは私のコードを修正するために助けてくださいできます..本当に私は苦労しています。 – DEADEND

+0

どうやって存在しないオブジェクトに何かを注入することができますか?あなたはどうやってそれをしますか?初期化子ブロックが '{} 'の間の部分をコンストラクタにコピーします...その時点ではまだnullです...コンストラクタで' @ Autowired'フィールドを使うことはできません。 –

答えて

1

ここでは、あなたのコードを修正する方法についての例です:

@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>{ 
} 

また、あなたは@Autowired注釈を使用することができますコンストラクタで

@Component 
public class TestClass { 

    public TestDAO testDAO; 

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

は、それはその時点で `null`なのでを返します。もちろん、

+0

このソリューションで問題を解決できましたか? – jcgarcia

+0

はいjcgarcia ..ありがとうございました。 – DEADEND

+0

それを聞いてうれしい! :) – jcgarcia

関連する問題