Java 使定义的Springbean成为主
我在spring.xml中定义了3个相同类型的bean。这是在一个我无法编辑的jar文件中。我想使用注释在我的spring boot应用程序中创建其中一个主应用程序。有办法吗?您可以使用Java 使定义的Springbean成为主,java,spring,spring-boot,Java,Spring,Spring Boot,我在spring.xml中定义了3个相同类型的bean。这是在一个我无法编辑的jar文件中。我想使用注释在我的spring boot应用程序中创建其中一个主应用程序。有办法吗?您可以使用@Qualifier(“\uuuuu beanName\uuuu”)注释来选择正确的一个一个简单的方法是使用桥配置,它将所需的bean注册为新的主bean。一个简单的例子: 界面: public interface Greeter { String greet(); } 您无法控制的配置: @Configura
@Qualifier(“\uuuuu beanName\uuuu”)
注释来选择正确的一个一个简单的方法是使用桥配置,它将所需的bean注册为新的主bean。一个简单的例子:
界面:
public interface Greeter { String greet(); }
您无法控制的配置:
@Configuration
public class Config1 {
@Bean public Greeter british(){ return () -> "Hi"; }
@Bean public Greeter obiWan(){ return () -> "Hello there"; }
@Bean public Greeter american(){ return () -> "Howdy"; }
}
桥接器配置:
@Configuration
public class Config2 {
@Primary @Bean public Greeter primary(@Qualifier("obiWan") Greeter g) {
return g;
}
}
客户端代码:
@RestController
public class ControllerImpl {
@Autowired
Greeter greeter;
@RequestMapping(path = "/test", method = RequestMethod.GET)
public String test() {
return greeter.greet();
}
}
curl的结果http://localhost:8080/test
将被删除
Hello there
我尝试了一些解决方案,但不起作用。我在已定义的配置中有一个NullPointerException
然后我在Spring Boot上找到了下一个解决方案
@Configuration
public class Config1 {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.ddbb")
public JndiPropertyHolder ddbbProperties() {
return new JndiPropertyHolder();
}
@ConditionalOnProperty(name = "spring.datasource.ddbb.primary", matchIfMissing = false, havingValue = "true")
@Bean("ddbbDataSource")
@Primary
public DataSource ddbbDataSourcePrimary() {
return new JndiDataSourceLookup().getDataSource(ddbbProperties().getJndiName());
}
@ConditionalOnProperty(name = "spring.datasource.ddbb.primary", matchIfMissing = true, havingValue = "false")
@Bean("ddbbDataSource")
public DataSource ddbbDataSource() {
return new JndiDataSourceLookup().getDataSource(ddbbProperties().getJndiName());
}
}
如果我需要此数据源作为主数据源,请使用我的application.properties,否则不要设置属性或设置为false
spring.datasource.ddbb.primary=true
那些豆子有不同的名字吗?您可能可以使用它。是的,这些bean有不同的名称。请使用
@Qualifier(“beanName”)
然后抱歉,我如何使用Qualifier使其成为主要的?谢谢@JiriS。使用Qualifier如何使其成为主要的?我不确定您的目标是否是将@primary
注释用于除自动布线以外的任何内容,但是它的主要用途是指示bean应该主要用于自动连接(请参阅)。所以我想让它成为主要的。如果它只基于@primary
注释,可能会有点困难,可能会涉及一些类路径魔法。否则,它将帮助编辑问题并将此代码添加到其中。