Spring常见的注解的使用以及说明

在一个配置类中,注册了两个类型一样的bean,这种设计没什么实际意义,而@ConditionalOnMissingBean真正意义在于它的扩展性,即当你封装一个组件时,你的组件有个默认的实现类,这时为默认的实现类bean上,添加@ConditionalOnMissingBean;而在外部,开发人员根据业务定义自己的bean,这时它就有意义了,当在外部出现多个相同类型bean时,spring会为我们选择不带@ConditionalOnMissingBean注解的实现;也就是说@ConditionalOnMissingBean是当没有个性化bean时,提供一个默认的bean,这才是它的意义!

注意你的@ConditionalOnMissingBean是修饰@Bean的,不能修饰@Component这些注释的,它会失去作用。

@ConditionalOnProperty
通过其三个属性prefix,name以及havingValue来实现的,其中prefix表示配置文件里节点前缀,name用来从application.properties中读取某个属性值,havingValue表示目标值。

如果该值为空,则返回false;
如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。
返回值为false,则该configuration不生效;为true则生效。
下面代码演示为配置文件lind.redis.enable为true时才会注册RedisFactory这个bean

@Configuration
@ConditionalOnProperty(prefix="lind.redis",name = "enable", havingValue = "true")
public class RedisConfig {
    @Bean
    public RedisMap redisMap(){
       return new RedisMapImpl();
    }
}

@ConditionalOnBean //
它是一种依赖,当@ConditionalOnBean(Fishing.class),表示当存在Fishing这个bean,才注册当前这个bean。
@ConditionalOnMissingBean //
它是一种默认值,当没有自定义的bean时,就使用它产生的bean,@ConditionalOnMissingBean(FishFood.class)表示当没有FishFood实现的bean,就使用当前方法产生的FishFood的bean.
@ConditionalOnClass // 当给定的类名在类路径上存在,就注册当前修饰的bean
@ConditionalOnMissingClass // 当给定的类名在类路径上不存在,则实例化当前Bean,也是默认值的体现

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值