首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring 3默认bean

Spring 3默认bean
EN

Stack Overflow用户
提问于 2014-10-21 14:22:18
回答 1查看 451关注 0票数 0

我正在处理一个带有多个spring配置java类的项目。他们中的许多人拥有来自其他配置类的bean,这些bean都是自动进入的,然后注入到其他bean的构造函数中。

为了使其尽可能灵活,我一直在使用spring概要文件来定义在多个接口可用的情况下要使用的接口实现。

这很好,但是我想知道Spring是否有任何方法可以定义默认bean?

例如:如果在类路径中找不到Foo类型的bean,则注入实现栏。否则别理酒吧。

我看过这个问题:Spring 3: Inject Default Bean Unless Another Bean Present,如果您知道所有bean的名称,用Java显示的解决方案会很好,但在我的例子中,我将不知道bean的名称。

有谁知道实现这个目标的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-21 14:28:23

将默认值定义为默认值,只需确保bean的名称是相同的,配置文件中的名称将覆盖默认的bean。

代码语言:javascript
运行
复制
<beans>

    <!-- The default datasource -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    </bean>

    <beans profile="jndi">
        <jndi:lookup id="dataSource" jndi-name="jdbc/db" />
    </beans>

</beans>

此构造还将适用于基于Java的配置。

代码语言:javascript
运行
复制
 @Configuration
 public DefaultConfig {

      @Bean
      public DataSource dataSource() { ... }

      @Configuration
      @Profile("jndi")
      public static class JndiConfig {

          @Bean
          public DataSource dataSource() { ... // JNDI lookup }
      }

 }

在使用基于java的配置时,您还可以指定默认配置,并在另一个配置中添加另一个该类型的bean,并使用@Primary对其进行注释。当发现多个实例时,应该使用带有@Primary的实例。

代码语言:javascript
运行
复制
@Configuration
public DefaultConfig {

     @Bean
     public DataSource dataSource() { ... }
}

@Configuration
@Profile("jndi")
public class JndiConfig {

    @Bean
    @Primary
    public DataSource jndiDataSource() { ... // JNDI lookup }
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26489071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档