有条件地创建基于自定义业务逻辑的bean

问题描述 投票:0回答:1

这是我的用例:

当我的应用程序启动时,将创建N类型的A bean。

我想拥有自己的商业逻辑来检查这些N豆1和1:

  • 如果它们都不满足我的标准,我将创建另一个A类型的bean来弹出容器。
  • 如果他们中的任何一个满足我的标准,就什么都不做。

我不确定我是否可以像这样简单地使用Optional:

@Autowired
List<A> beans;

@Bean
public Optional<A> maybeA(){
  //check beans and optionally create a A
}
spring spring-boot spring-bean
1个回答
0
投票

定义返回类型为Optional的bean是非常不寻常的,并不是一个好的解决方案。我建议你检查一下你是否可以按照https://iamninad.com/conditional-bean-creation-in-spring-boot/的描述实现你的逻辑,或者如果你坚持按照你的解决方案,你可以创建一个新类:

public class UnMatchedACriteriaImpl implements A {

   public void testMethod() throws UnSatisfiedXCriteria {
       throw new UnSatisfiedXCriteria();
   }
}

并将您的bean定义更改为:

@Bean
public A maybeA(){
  //check beans and optionally create a A
}

如果您的标准不匹配,则返回UnMatchedACriteriaImpl版本的A。当您想在应用程序中使用它时,这是清晰且易于管理的。

© www.soinside.com 2019 - 2024. All rights reserved.