我是 Spring 框架的新手,我尝试了以下示例:
首先我创建了两个非常简单的类
public class ObjectA {
@Override
public String toString() {
return "I am ObjectA";
}
}
public class ObjectB {
@Override
public String toString() {
return "I am ObjectB";
}
}
不,我想使用这个由 Spring 管理的类。 所以我创建了另一个类,它使用 @Resource (javax.annotation.Resource) 注释来连接两个对象。
public class MyApp {
@Resource
public ObjectA oa;
@Resource
public ObjectB ob;
public void info() {
System.out.println("--------------");
System.out.println(oa);
System.out.println("--------------");
System.out.println(ob);
System.out.println("--------------");
}
public static void main( String[] args ) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("mySpringConfig.xml");
System.out.println(applicationContext.getBean( ObjectA.class ));
System.out.println(applicationContext.getBean( ObjectB.class ));
MyApp myApp = applicationContext.getBean( MyApp.class );
myApp.info();
}
}
mySpringConfig.xml 包含以下内容:
[..]
<bean id="objectA" class="com.mySpringCompany.ObjectA" />
<bean id="objectb" class="com.mySpringCompany.ObjectB" />
<bean id="myApp" class="com.mySpringCompany.MyApp" />
[..]
现在,当我运行 MyApp 的 Main-Method 时,我得到以下信息:
I am ObjectA
I am ObjectB
--------------
null
--------------
null
--------------
因此,当我在主方法中直接使用 applicationContext.getBean( ObjectA.class ) 时,我得到了 ObjectA 的一个实例。当我想进入 MyApp 对象时,它不起作用。但我认为 Spring 应该在 MyApp 类中注入(inject)这两个对象。我做错了什么?在此先感谢您的帮助。
最佳答案
您在 XML 中定义了所有 3 个 bean 做得很好。
但是还需要通过注解来激活配置,否则@Resource
就没有什么可解释的了。 Spring 只有在您指示它时才会这样做。
这Bean Post Processor处理 @Resource
。
你可以简单地将它定义为一个bean:
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
或者你可以使用这个:
<context:annotation-config>
关于java - @Resource 在 Spring 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676941/