关于策略模式的几种实现

1.使用byname方案(不推荐)

缺点:还是要去源代码修改名称

2.有选择的将类加入容器或者通过@Qualifier(“参数”)参数的修改来进行修改

3.@Primary优先注解

image.png

条件注解 @Conditional

我们可以使用调节注解解决策略模式的变化,当然它不仅仅是解决策略模式的变化
当满足某种条件的时候,加入bean到IOC容器中,当不满足某种条件的时候,这个bean不会加入到IOC容器中。

自定义条件注解

@Conditional + @Condition

通过条件注解,来判断是否需要将对象放置到容器中(基本使用)
image.png
matchs方法书写业务逻辑并返回boolean值,确认是否加入容器
在HeroConfiguration中
image.png
这样就能做到使用条件注解,来确认对象是否应该加入容器中!
代码链接: feat: 条件注解初体验

使用Condition与ConditionContext的参数来进行条件注入

上面的例子,变化最好隔离配置文件,我们可以进行@Conditional + 配置文件,进行条件注解的使用
首先我们可以看一下Condition这个接口的matches方法的参数conditionContext
image.png
我们可以使用getEnvironment方法,获取环境变量中的参数
image.png
image.png

这样就可以做到使用配置文件来进行条件注入
代码链接:feat: 使用Condition与ConditionContext的参数来进行条件注入

内置成品条件组件注解@ConditionalOnProperty

image.png
@ConditionalOnProperty(value=”环境变量的key”,havingValue=”对应key的value”)
我们可以抛弃自定义条件注解来进行成品注解(@ConditionalOnProperty)进行条件注入

image.png
如果没有读取到value的key值,就打上matchIfMissing = true的Bean加入到容器内部(默认值作用)

@ConditionalOnBean注解(11.1-7)使用

还未看