我正在处理一个带有多个spring配置java类的项目。他们中的许多人拥有来自其他配置类的bean,这些bean都是自动进入的,然后注入到其他bean的构造函数中。
为了使其尽可能灵活,我一直在使用spring概要文件来定义在多个接口可用的情况下要使用的接口实现。
这很好,但是我想知道Spring是否有任何方法可以定义默认bean?
例如:如果在类路径中找不到Foo类型的bean,则注入实现栏。否则别理酒吧。
我看过这个问题:Spring 3: Inject Default Bean Unless Another Bean Present,如果您知道所有bean的名称,用Java显示的解决方案会很好,但在我的例子中,我将不知道bean的名称。
有谁知道实现这个目标的方法吗?
发布于 2014-10-21 14:28:23
将默认值定义为默认值,只需确保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的配置。
@Configuration
public DefaultConfig {
@Bean
public DataSource dataSource() { ... }
@Configuration
@Profile("jndi")
public static class JndiConfig {
@Bean
public DataSource dataSource() { ... // JNDI lookup }
}
}在使用基于java的配置时,您还可以指定默认配置,并在另一个配置中添加另一个该类型的bean,并使用@Primary对其进行注释。当发现多个实例时,应该使用带有@Primary的实例。
@Configuration
public DefaultConfig {
@Bean
public DataSource dataSource() { ... }
}
@Configuration
@Profile("jndi")
public class JndiConfig {
@Bean
@Primary
public DataSource jndiDataSource() { ... // JNDI lookup }
} https://stackoverflow.com/questions/26489071
复制相似问题