@Conditional..注解

1.一般依赖注入:

@Autowired那就默认代表当前Bean一定是已经存在的,如果为null,会报错

@Autowired(required=false) //required=false 的意思就是允许当前的Bean对象为null。

2.问题

但是多个类似对象的时候,选择那个呢?

@ConditionalOnClass

是Springboot实现自动配置的重要支撑之一。其用途是判断当前classpath下是否存在指定类,若是则将当前的配置装载入spring容器。举例来说,如果在maven中引入了velocity,那么视图就使用velocity,若引入的是freemarker,则使用freemarker.,如果都引入了呢

3.也可以可以通过条件控制是否注入Bean

当候选类都在的情况下,通过条件选择,spring会挑其中之一

例如:Spring Boot关于Spring Data Redis的自动配置类。该自动配置类检测到包spring-data-redis被使用时才应用

RedisAutoConfiguration自身主要的作用是确保以下bean存在于容器中 :

RedisTemplate redisTemplate – 基于容器中的redisConnectionFactory bean,// 仅在该 bean 不存在的情况下才定义

StringRedisTemplate stringRedisTemplate – 基于容器中的redisConnectionFactory bean,// 仅在该 bean 不存在的情况下才定义


@ConditionalOnBean

仅仅在当前上下文中存在某个对象时,才会实例化一个Bean

@ConditionalOnClass

某个class位于类路径上,才会实例化一个Bean

@ConditionalOnExpression

当表达式为true的时候,才会实例化一个Bean

@ConditionalOnMissingBean

仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean

@ConditionalOnMissingClass

某个class类路径上不存在的时候,才会实例化一个Bean

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容