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,但我仍然需要 getBean 方法来注入 bean。

4

3 回答 3

1

这是因为TestIOC不是由spring管理的。如果你想@Resource工作,那么你需要为它创建一个 beanTestIOC并使用它。

将以下 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。还有一件事与这个问题无关,我想提一下,如果你使用<Context:annotation-config>和使用@Resource来注入bean,那么bean 必须在xml 中配置,而不是带有Component 的注释bean。有时它与<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 将尝试将“university”属性与对 ID 为“university”的 bean 的引用联系起来。

于 2013-03-06T10:37:21.513 回答