Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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/12.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 springpick最高优先级bean_Java_Spring - Fatal编程技术网

Java springpick最高优先级bean

Java springpick最高优先级bean,java,spring,Java,Spring,使用如下配置: class MySpringConfig { @Bean // Lowest priority @Qualifier("pri1") Bean beanPri1() { ... } @Bean // Medium priority @Qualifier("pri2") Bean beanPri2() { ... } // @Bean // Highest priority // @Qualifier("pri3") // Bean beanPri

使用如下配置:

class MySpringConfig {
  @Bean // Lowest priority
  @Qualifier("pri1")
  Bean beanPri1() { ... }

  @Bean // Medium priority
  @Qualifier("pri2")
  Bean beanPri2() { ... }

//  @Bean // Highest priority
//  @Qualifier("pri3")
//  Bean beanPri3() { ... }
}
@Service
class MyService {
  @Autowired
  @Qualifier("pri1")
  Bean beanPri1;

  @Autowired
  Bean beanWhateverTheHighestPriIs;
}
还有这样的服务:

class MySpringConfig {
  @Bean // Lowest priority
  @Qualifier("pri1")
  Bean beanPri1() { ... }

  @Bean // Medium priority
  @Qualifier("pri2")
  Bean beanPri2() { ... }

//  @Bean // Highest priority
//  @Qualifier("pri3")
//  Bean beanPri3() { ... }
}
@Service
class MyService {
  @Autowired
  @Qualifier("pri1")
  Bean beanPri1;

  @Autowired
  Bean beanWhateverTheHighestPriIs;
}
是否可以告诉Spring注入:

  • beanPri1
    (因为它是由
    @限定符
    给出的)进入
    服务。beanPri1
  • 无论最高优先级的bean进入
    服务。无论优先级最高的bean是什么
使用注释或类似的东西,可以相对容易地跨配置和不同的bean集重用

使用上述配置并执行以下更改的示例:

  • 无更改:
    Service.bean最高优先级应为
    beanPri2
  • 取消注释
    beanPri3
    Service.bean最高优先级应为
    beanPri3
  • 评论
    beanPri2
    服务。bean最高优先级应为
    beanPri1

您可以使用它来告诉spring首先使用哪个

另一种方法是使用@Value注释和表达式来解析有序bean的集合,然后使用[0]返回具有最高顺序的bean

我试过了,但是这导致所有bean仍然被视为候选bean,并导致非唯一bean异常。我的理解是,
@Order
仅用于在注入
集合
类型的属性时对它们进行排序-因此优先级较高的属性优先。我是对的还是有办法告诉它只注入一个?这通常是通过使用bean上方的
@Profile
来解决的。由于您无法在运行时更改实例(假设您的代码示例),因此它似乎是最合适的。为不同的配置文件定义一个bean,并在启动时决定使用哪个bean。另一种方法是自动连线
List
a使用自定义方法查找“最佳”实例,我认为这不太可取,因为在自动连线的每个位置都必须这样做。如果我是你的话,我会看看限定符注释是如何实现的,并且会对我的自定义HighestOrder注释执行相同的操作,该注释以最高优先级而不是名称解析bean。。。