Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 使定义的Springbean成为主_Java_Spring_Spring Boot - Fatal编程技术网

Java 使定义的Springbean成为主

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

我在spring.xml中定义了3个相同类型的bean。这是在一个我无法编辑的jar文件中。我想使用注释在我的spring boot应用程序中创建其中一个主应用程序。有办法吗?

您可以使用
@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
注释,可能会有点困难,可能会涉及一些类路径魔法。否则,它将帮助编辑问题并将此代码添加到其中。