根据定制的biz逻辑有条件地创建bean

时间:2018-09-03 04:43:04

标签: spring spring-boot spring-bean

这是我的用例:

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

我想拥有自己的业务逻辑来按1和1依次检查这N个bean:

  • 如果它们都不满足我的条件,我将创建另一个类型为A的bean来弹跳容器。

  • 如果其中任何一个满足我的条件,那就什么都不做。

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

@Autowired
List<A> beans;

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

1 个答案:

答案 0 :(得分: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的{​​{1}}版本。当您想在应用程序中使用它时,它是清晰且易于管理的。