1

假设我有以下界面:

public interface Interface1 {
}

和以下课程:

public class Class1 implements Interface1 {}

另外,我有这堂课:

public class Class2 {
    private Interface1 interface;
    public void setInterface(Interface1 interface) {
        this.interface = interface;
    }
}

我应该在我的注入一个由intoapplicationContext.xml生成的 bean吗?另外,是否可以使用注释来做到这一点?Class1Class2.interface

4

3 回答 3

1

您只需像任何其他 bean 一样注入它,只要运行时类型兼容它就可以正常工作,无需对 XML 中的接口类型做任何特殊处理。

<bean id="class1" class="package.Class1"/>
<bean id="class2" class="package.Class2">
  <property name="interface" ref="class1"/>
</bean>

@Autowired也可以正常工作,当然如果容器中有多个 interface1 实现,您将需要使用@Qualifier.

于 2012-07-03T18:44:10.907 回答
1
  • 如果你使用 xml 没关系 - 你定义你的 bean 并通过 bean 名称(而不是类型)注入你的 bean
  • 如果你使用注解,use can use @Resource(name="beanName")or a@Qualifier
于 2012-07-03T18:49:22.803 回答
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 时,它会自动执行一些 spring 魔术,并使用该类来构造您的 bean,并使它们可用于其余基于 Xml 的上下文,因此您可以根据需要混合和匹配。由于一些漂亮的 javassist 魔法,处理 bean 范围、代理等非常聪明。

有关更多信息,请参阅: http ://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java

于 2012-07-03T19:20:25.147 回答