任何围绕着对控制的痴迷而建立的体制
最终都会失败,
因为它与现实不可控的本质相互矛盾
在Spring框架中,@Fallback注解是在Spring 6.2版本中引入的,用于在依赖注入时提供备选,也就是我们常说的备胎了。
用过 spring 同学一定了解,当Spring容器根据类型匹配到多个Bean时,会进一步根据注解@Primary 确定一个将会被使用的 bean。相当于选择一个主角 bean 来担当大任。
那么打了@Fallback 的 bean 具体是怎样的地位呢?
1. 备选Bean的定义:@Fallback注解用于标记那些在没有其他Bean可用时才被使用的Bean。这些Bean被视为“备胎”,仅在没有其他Bean可以注入时才会被使用。
2. 与@Primary注解的关系:@Primary注解用于指定在多个同类型Bean中优先使用的Bean,而@Fallback注解则提供了一种机制,当没有其他Bean可用时,使用被标记为@Fallback的Bean。@Primary和@Fallback注解可以视为相反的补充:@Primary表示“直接用我”,而@Fallback表示“先别用我,先用其他Bean”。
3. 使用场景:在有多个同类型Bean的情况下,如果Spring根据类型找到了多个Bean,并且无法根据属性名匹配到Bean时,就会报错。此时,可以使用@Primary来解决,现在也可以使用@Fallback来提供备选方案来解决这个报错。
4. 多个@Fallback注解的Bean:与@Primary注解不同,@Primary的Bean只能有一个,但可以有多个@Fallback注解的Bean。一个人也可以都多个备胎嘛,想不到代码也这么无情。
上面的代码注入了类型一样的 2 个 bean,但是名字不一样,一个是 orderService1,一个是 orderService2,但是 orderService1是一个备胎,只有当orderService2不能正常使用的时候,orderService 1 才会真正出场。
这个注解如果和@Profile 注解一起使用的话,在分析 Dpring 最终会使用哪个 bean 的时候需要结合当前使用的环境来进行分析。
通过使用@Fallback注解,开发者可以为Spring容器中的Bean提供更加灵活的备选方案,以应对不同的运行时情况。