Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring3默认bean_Java_Spring_Dependency Injection - Fatal编程技术网

Java Spring3默认bean

Java Spring3默认bean,java,spring,dependency-injection,Java,Spring,Dependency Injection,我正在从事一个包含多个spring配置java类的项目。它们中的许多都有来自其他配置类的bean,这些bean自动连接到其他bean的构造函数中,然后注入到其他bean的构造函数中 为了使它尽可能灵活,我一直在使用spring概要文件来定义在多个可用接口的情况下使用哪个接口实现 这很好,但我想知道Spring是否有任何方法可以定义默认bean 例如:如果在类路径上找不到Foo类型的bean,则注入实现栏。否则,忽略吧 我已经研究了这个问题:,如果您知道所有bean的名称,那么用Java配置显示的

我正在从事一个包含多个spring配置java类的项目。它们中的许多都有来自其他配置类的bean,这些bean自动连接到其他bean的构造函数中,然后注入到其他bean的构造函数中

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

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

例如:如果在类路径上找不到Foo类型的bean,则注入实现栏。否则,忽略吧

我已经研究了这个问题:,如果您知道所有bean的名称,那么用Java配置显示的解决方案可以很好地工作,但是在我的例子中,我不知道这些bean被称为什么


有人知道实现这一点的方法吗?

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

<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的配置时,您还可以指定默认值,并在另一个配置中添加该类型的另一个bean,并使用
@Primary
对其进行注释。当找到多个实例时,应使用带有
@Primary
的实例

@Configuration
public DefaultConfig {

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

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

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

非常感谢。小学是我一直在寻找的
@Configuration
public DefaultConfig {

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

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

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