Spring无法使用@Resource实例化bean

时间:2013-03-06 10:13:54

标签: spring dependency-injection resources inversion-of-control javabeans

我正在运行这一小段代码。

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。

3 个答案:

答案 0 :(得分:1)

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

将以下bean添加到service.xml

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

然后在java中使用它

TestIOC ioc = context.getBean(TestIOC.class);
System.out.println(ioc.university);

答案 1 :(得分:0)

肯定是因为你没有在Spring上下文中配置TestIOC类,所以The Spring对此无能为力。您应该将它作为bean添加到service.xml。我想提到的一个与这个问题无关的事情是,如果你使用<Context:annotation-config>并使用@Resource来注入bean,那么bean必须在xml中配置而不是带有Component的注释bean 。有时会与<context:component-scan/>

混淆

答案 2 :(得分:0)

@Resorce

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

在你的情况下,Spring将尝试连接“大学” 引用ID为“university”的bean的属性。