假设我有以下界面:
public interface Interface1 {
}
以及以下课程:
public class Class1 implements Interface1 {}
另外,我有这个课程:
public class Class2 {
private Interface1 interface;
public void setInterface(Interface1 interface) {
this.interface = interface;
}
}
我应该在applicationContext.xml
中将Class1
生成的bean注入Class2.interface
?此外,是否可以使用注释进行操作?
答案 0 :(得分:1)
您只需像其他任何bean一样注入它,只要Runtime类型兼容它就可以正常工作,不需要对XML中的接口类型做任何特殊处理。
<bean id="class1" class="package.Class1"/>
<bean id="class2" class="package.Class2">
<property name="interface" ref="class1"/>
</bean>
@Autowired
也可以正常工作,当然如果容器中有多个interface1实现,你需要用@Qualifier
指定bean名称。
答案 1 :(得分:1)
@Resource(name="beanName")
或@Qualifier
答案 2 :(得分:0)
另一种选择是javaconfig:
package com.mycom.myapp.config;
@Configuration
public class MyConfiguration {
@Bean
public Class1 class1() {
return new Class1();
}
@Bean
public Class2 class2() {
Class2 class2 = new Class2();
class2.setInterface(class1());
}
}
然后是另一小部分xml粘合代码,让xml配置找到你的 @Configuration带注释的类。
<context:component-scan base-package="com.mycom.myapp.config" />
当它看到@Configuration时,它会自动执行一些弹簧魔术,并使用该类构建您的bean,并使其可用于基于Xml的其余上下文,因此您可以根据需要进行混合和匹配。它足够聪明,可以处理bean范围,代理等等....即使你调用一个本地的方法(如上例中的“class1()”)也要感谢一些漂亮的javassist魔法。