Java 如何在类型为接口的注入点中注入实现
假设我有以下接口:Java 如何在类型为接口的注入点中注入实现,java,spring,dependency-injection,Java,Spring,Dependency Injection,假设我有以下接口: public interface Interface1 { } 以及以下类别: public class Class1 implements Interface1 {} 此外,我还有这门课: public class Class2 { private Interface1 interface; public void setInterface(Interface1 interface) { this.interface = interfac
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
?另外,是否可以使用注释来执行此操作?您只需像任何其他bean一样注入它,只要运行时类型兼容,就可以正常工作,不需要对XML中的接口类型执行任何特殊操作
<bean id="class1" class="package.Class1"/>
<bean id="class2" class="package.Class2">
<property name="interface" ref="class1"/>
</bean>
@Autowired
也可以正常工作,当然,如果容器中有多个interface1实现,您需要使用@Qualifier
- 如果您使用xml,这无关紧要——您定义bean,并按bean名称(而不是类型)注入bean
- 如果使用注释,use可以使用
或@Resource(name=“beanName”)
@限定符
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配置找到您的
@配置注释类
<context:component-scan base-package="com.mycom.myapp.config" />
当它看到@Configuration时,它会自动执行一些spring魔术,并使用该类来构造bean,并使它们可用于基于Xml的上下文的其余部分,因此您可以根据需要进行混合和匹配。它足够聪明来处理bean范围、代理等。。。。即使在调用该类的本地方法时(如上例中的“class1()”),也要感谢一些漂亮的javassist魔术
有关详细信息,请参阅: