我正在运行这一小段代码。
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。
答案 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)
Indicates that a method or field should be injected with a
named resource (by default, another bean).
在你的情况下,Spring将尝试连接“大学” 引用ID为“university”的bean的属性。