有没有办法只使用注释从同一个类声明两个spring bean实例?

时间:2013-09-09 11:40:38

标签: java spring annotations

我通常使用XML Spring配置(spring-conf.xml)来执行此操作:

<beans>

    <context:component-scan base-package="org.company.dept.business" />
   ... 
    <bean id="myServiceB2B" class="org.company.dept.business.service.MyService"
        p:configLocation="WEB-INF/classes/b2b.properties" />

    <bean id="myServiceResidential" class="org.company.dept.business.service.MyService"
        p:configLocation="WEB-INF/classes/residential.properties" />
   ...

</beans>

因为MyService只有一个文件(定义),有没有办法在不使用XML Spring配置的情况下实例化两个bean?

我对XML定义没问题,但我总是尽量减少我的XML配置。

2 个答案:

答案 0 :(得分:11)

与在XML中使用2 <bean>声明的方式相同,在Java配置中使用2 @Bean个带注释的类。

@Configuration
public class MyConfiguration {
    @Bean(name = "firstService")
    public MyService myService1() {
        return new MyService();
    }

    @Bean(name = "secondService")
    public MyService myService2() {
        return new MyService();
    }
}

我不知道configLocation的用途,但您也可以在Java配置中包含它。

name的{​​{1}}属性相当于@Bean的{​​{1}}属性。

答案 1 :(得分:2)

如果您需要bean的多个实例,则必须在XML或@Configuration带注释的类中显式配置它们。无论哪种方式,您都需要某种方式明确定义bean,您不能仅通过组件扫描来拥有多个实例。