南京做网站南京乐识赞,网页美工设计图片,js做网站好吗,网站建设实训总结及体会概述
spring的ioc极大的方便了日常开发#xff0c;但随着业务的迭代。配置的一些参数在某些情况下需要按条件注入。
比如原先定义的db公共模块下#xff0c;相关的配置和工具类只是基于mysql的。但是后续有模块需要使用mongo/es等其他数据库#xff0c;又想继续使用db公共…概述
spring的ioc极大的方便了日常开发但随着业务的迭代。配置的一些参数在某些情况下需要按条件注入。
比如原先定义的db公共模块下相关的配置和工具类只是基于mysql的。但是后续有模块需要使用mongo/es等其他数据库又想继续使用db公共模块下的一些类。
那么这时候就希望db公共模块下可以根据classpath下的相关驱动class是否存在来自动注入相关类。
Condition注解就能解决这个问题。这个注解是spring的 org.springframework.context.annotation.Conditional
springboot的核心是习惯优于配置所有现成的实现了一堆Conditionxxxx注解,比如 org.springframework.boot.autoconfigure.condition.ConditionalOnBean org.springframework.boot.autoconfigure.condition.ConditionalOnClass
Condition
进到这个注解的源码中一看发现核心是org.springframework.context.annotation.Condition 接口里面就一个matches方法返回true/false. 意思也很简单true就是符合条件会被spring加载到ioc容器中false则不会.
matches方法的入参org.springframework.context.annotation.ConditionContext中可以拿到很多有用的信息 springboot内置现成的Condition实现类封装的注解 ConditionalOnSingleCandidate 当给定类型的bean存在并且指定为Primary的给定类型存在时,返回trueConditionalOnMissingBean 当给定的类型、类名、注解、昵称在beanFactory中不存在时返回true.各类型间是or的关系ConditionalOnBean 与上面相反要求bean存在ConditionalOnMissingClass 当给定的类名在类路径上不存在时返回true,各类型间是and的关系ConditionalOnClass 与上面相反要求类存在ConditionalOnCloudPlatform 当所配置的CloudPlatform为激活时返回trueConditionalOnExpression spel表达式执行为trueConditionalOnJava 运行时的java版本号是否包含给定的版本号.如果包含,返回匹配,否则,返回不匹配ConditionalOnProperty 要求配置属性匹配条件ConditionalOnJndi 给定的jndi的Location 必须存在一个.否则,返回不匹配ConditionalOnNotWebApplication web环境不存在时ConditionalOnWebApplication web环境存在时ConditionalOnResource 要求制定的资源存在