2012-07-03 46 views
1

假設我有以下接口:如何在注入點,其類型注入的實現是一個接口

public interface Interface1 { 
} 

及以下類:

public class Class1 implements Interface1 {} 

另外,我有這個類:

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

我應該把什麼在我的applicationContext.xml注入由產生一個bean納入Class2.interface?另外,是否有可能使用註釋做到這一點?

回答

1

你只是像注入其他任何bean一樣注入它,只要運行時類型兼容,它就可以正常工作,不需要對XML中的接口類型做任何特殊的處理。

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

@Autowired也將工作,當然很好,如果在容器中不止一個執行接口1的,你會想用@Qualifier bean指定一個名稱。

1
  • ,如果你使用XML它不會有問題 - 你定義你的bean和您通過bean名字注入你的bean(而不是類型)
  • ,如果你使用註解,使用可以使用@Resource(name="beanName")@Qualifier
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,它會自動執行一些春天的魔法,並使用這個類來構建你的豆子,並使其可用於基於XML上下文的休息,所以你可以混合和匹配,如果你自找的。它足夠聰明,可以處理bean作用域,代理等等,即使當你調用該類的局部方法(比如上面例子中的「class1()」)時,也要感謝一些漂亮的javassist魔術。

欲瞭解更多信息,請參閱:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-java

相關問題