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