使用Conditional

使用Conditional

廖雪峰

资深软件开发工程师,业余马拉松选手。

使用Profile能根据不同的Profile进行条件装配,但是Profile控制比较糙,如果想要精细控制,例如,配置本地存储,AWS存储和阿里云存储,将来很可能会增加Azure存储等,用Profile就很难实现。

Spring本身提供了条件装配@Conditional,但是要自己编写比较复杂的Condition来做判断,比较麻烦。Spring Boot则为我们准备好了几个非常有用的条件:

@ConditionalOnProperty:如果有指定的配置,条件生效;

@ConditionalOnBean:如果有指定的Bean,条件生效;

@ConditionalOnMissingBean:如果没有指定的Bean,条件生效;

@ConditionalOnMissingClass:如果没有指定的Class,条件生效;

@ConditionalOnWebApplication:在Web环境中条件生效;

@ConditionalOnExpression:根据表达式判断条件是否生效。

我们以最常用的@ConditionalOnProperty为例,把上一节的StorageService改写如下。首先,定义配置storage.type=xxx,用来判断条件,默认为local:

storage:

type: ${STORAGE_TYPE:local}

设定为local时,启用LocalStorageService:

@Component

@ConditionalOnProperty(value = "storage.type", havingValue = "local", matchIfMissing = true)

public class LocalStorageService implements StorageService {

...

}

设定为aws时,启用AwsStorageService:

@Component

@ConditionalOnProperty(value = "storage.type", havingValue = "aws")

public class AwsStorageService implements StorageService {

...

}

设定为aliyun时,启用AliyunStorageService:

@Component

@ConditionalOnProperty(value = "storage.type", havingValue = "aliyun")

public class AliyunStorageService implements StorageService {

...

}

注意到LocalStorageService的注解,当指定配置为local,或者配置不存在,均启用LocalStorageService。

可见,Spring Boot提供的条件装配使得应用程序更加具有灵活性。

练习

使用Spring Boot提供的条件装配。

下载练习

小结

Spring Boot提供了几个非常有用的条件装配注解,可实现灵活的条件装配。

相关推荐

泓樽付还能做多久
365bet大陆华人的网站

泓樽付还能做多久

📅 07-23 👁️ 2004
老公骗老婆的钱可以起诉吗
365bet大陆华人的网站

老公骗老婆的钱可以起诉吗

📅 08-14 👁️ 8735
windows下怎么运行php文件路径
365bet中国官方网站

windows下怎么运行php文件路径

📅 07-27 👁️ 5542
值得一生去看的21个演讲,8部经典励志电影,12部大师纪实片,60部纪录片
大猩猩为什么用拳头捶击胸口
office365链接怎么打开

大猩猩为什么用拳头捶击胸口

📅 07-20 👁️ 7760
超级舰队将领攻略:战略布局,技能搭配,提升战斗力
365bet中国官方网站

超级舰队将领攻略:战略布局,技能搭配,提升战斗力

📅 07-05 👁️ 5523
世界杯到底有没有假球?
365bet中国官方网站

世界杯到底有没有假球?

📅 07-01 👁️ 8255
fsd联机选什么服务器
office365链接怎么打开

fsd联机选什么服务器

📅 08-13 👁️ 6788
卖酒网站排名(十大卖酒网站)
365bet中国官方网站

卖酒网站排名(十大卖酒网站)

📅 07-15 👁️ 190