@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

你可能感兴趣的:(@Conditional..注解)