

こんばんは、皆様のお知恵を拝借したくて書き込みます。

[code]

    @Service
    public class Parent1 extends Child {
        // ここは定義だけ
    }
    
    public class Child extends BaseChild {
        // ここはBaseの呼び出しを行う
    }
    
    public class BaseChild {
        public void aMethod() {
            Create c = new Create();
            // c のメソッド呼び出しを行う
        }
    }
    
[/code]

上記の様な構成で、ちょっと失念してしまったのですが  
どこかがabstractが入ってた筈なのですが・・・

[code]

    @Component
    public class Create {
        @AutoWired
        Properties prop;
    }
    
[/code]

@Autowired対象のSpring設定

[code]

    <bean id="prop" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
      <property name="locations">
        <list>
          <value>/WEB-INF/resources/test.properties</value>
        </list>
      </property>
    </bean>
    
[/code]

BaseChild内の処理で、別クラスCreateをインスタンス化して  
メソッドを呼び出しているのですが  
インスタンス化したクラスで使おうとしているプロパティの  
AutoWiredでの注入が出来ずに困っています。

Parent1の様な構成をしていない単独クラスのParent2で  
AutoWiredをするとちゃんと注入されるので  
記述等がおかしい可能性は低そうなのですが・・・  
Springは経験が少ない為、ご教授お願い致します。


CC BY-SA 3.0
2015-11-02T13:36:59.153
18330
2015-11-04T23:13:29.757
2015-11-04T23:13:29.757
754
10515
question
java spring
SpringのAutoWiredの挙動について


多分なのですが、 Parent2 で意図した動作を行わせた際には、 `@Autowired` で `Create`
クラスを注入していたのではないでしょうか。

[code]

    public class Parent2 {
        @Autowired
        Create c;
        public void hogeMethod() {
            // c のメソッド呼び出し
        }
    }
    
[/code]

同様に、`BaseChild`でも、`Create` を `@Autowired` で注入すれば、意図した動作になるはずです。

勝手に値・オブジェクトが注入されるのは、spring によって管理されている bean だけであって、自前で new したオブジェクトの中の
`@Autowired` へは、勝手には注入されません。

NOTE: `@Service` が付与されているという情報から推察するに、Parent1 や Parent2 は、 あなたの実行環境では bean として
spring で管理されている様子です。

FWIW: 基底クラスの中での Autowired が可能かどうか、試してみた結果 -> <https://github.com/Yuki-
Inoue/test-mvn-autowired>


CC BY-SA 3.0
2015-11-04T17:58:02.400
18409
2015-11-04T18:38:14.647
2015-11-04T18:38:14.647
754
754
18330
answer