0

この小さなコードを実行しています。

public class TestIOC {

@Resource
University university;

public static void main(String[] arg)
{
    ApplicationContext context =
        new ClassPathXmlApplicationContext("service.xml");
    TestIOC ioc = new TestIOC();
    //ioc.university = (University)context.getBean("university");
    System.out.println(ioc.university);
}
}

これが私の service.xml ファイルです。

<context:annotation-config />
<bean id="university" class="com.test.beans.University">
    <constructor-arg type = "int" value="1"   />
    <constructor-arg type = "java.lang.String" value="Some University"   />
    <constructor-arg type = "java.lang.String" value="Some City"   />

</bean>

コメントした場合 context.getBean("university"); 大学の値を印刷できません。ただし、 context.getBean("university"); を使用します。出力を印刷できます。

@Resource を使用していますが、Bean を注入するには getBean メソッドが必要でした。

4

3 に答える 3

1

TestIOCスプリングで管理されていないためです。作業したい場合は@Resource、Bean を作成してTestIOC使用する必要があります。

次の Bean を service.xml に追加します。

<bean id="testIOC" class="TestIOC"></bean>

次に、Javaで次のように使用します

TestIOC ioc = context.getBean(TestIOC.class);
System.out.println(ioc.university);
于 2013-03-06T10:20:36.893 に答える
0

間違いなく、Spring コンテキストで TestIOC クラスを構成しなかったため、Spring はそれについて何もできません。これを bean として service.xml に追加する必要があります。そして、私が言及したいこの質問とは関係のないことの1つは、Beanを注入するために使用<Context:annotation-config>および使用する場合@Resource、Beanはコンポーネントで注釈が付けられたBeanではなく、xmlで構成する必要があるということです。と混同されることもある<context:component-scan/>

于 2013-03-06T10:29:54.387 に答える
0

@リソース

Indicates that a method or field should be injected with a 
named resource (by default, another bean).

あなたの場合、Spring は ID が「university」である Bean への参照を使用して「university」プロパティを接続しようとします。

于 2013-03-06T10:37:21.513 に答える