一.前言 本文承接上一节:Spring_总结_04_高级配置(一)之Profile 在上一节,我们了解到 Profile 为不同环境下使用不同的配置提供了支持,那么Profile到底是如何实现的呢?其实Profile正是通过条件注解来实现的. 条件注解的应用场景举例: (1)希望一个或多个 bean 只有在应用的类路径下包含特定的库时才创建 (2)希望某个bean只有当另外某个特定bean也声明了之后才创建 (3)希望只有某个特定的环境变量设置之后,才会创建某个bean 上述场景能让我们联想到s…
一.前言 本文承接上一节:Spring_总结_04_高级配置(二)之条件注解@Conditional 我们前面装配bean时,在Spring容器中,都是只有一个bean能匹配所需的结果. 如果有多个bean能匹配结果的话,Spring就将无法做出选择,这就是自动装配的歧义性. 这一节我们将解决自动装配的歧义性 二.歧义实例 1.实体类 如下,有三个类都继承自Dessert @Component public class Cake implements Dessert {...} @Compone…
一.前言 本文承接上一节:Spring_总结_04_高级配置(四)_bean的作用域 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或者构造参数中.它通常指的是将一个对象与另一个对象进行关联. 但是bean装配的另一个方面指的是将一个值注入到bean的属性或者构造函数中. spring提供了两种在运行时求值的方式: (1)属性占位符 (Property placeholder) (2)Spring表达式语言( SpEL)…
一.前言 本文承接上一节:Spring_总结_04_高级配置(五)_运行时注入值…
一.前言 本文承接上一节:Spring_总结_04_高级配置(三)之处理歧义 1.单例bean Spring应用上下文中所有的bean默认都是单例的.也就是说,不管一个bean被注入到其他bean多少次,每次注入的都是同一个实例. 2.有状态bean与无状态bean 单例bean适用于那些无状态的对象,在多数情况下,单例bean是很理想的方案.但是有时候,你所使用的类是易变的,他会保持一些状态(有状态),因此重用是不安全的. 举个例子: 这段时间在做一个脚本引擎,需要在java中执行js代码.当…
一.条件注解@Conditional,组合注解,元注解 1. @Conditional:满足特定条件创建一个Bean,SpringBoot就是利用这个特性进行自动配置的. 例子: 首先,两个Condition,判断当前系统是否是Windows或者Linux(True False) 然后,2个ListService实现类,表明不同系统下的ListService实现. 主要,ConditionConfig使用了Java配置与@Conditional注解,根据LinuxCondition,或者Wind…
一.前言 本文承接上一节:Spring_总结_03_装配Bean(四)之导入与混合配置 这一节,来总结一下profile. 我们在开发软件时,通常会进行跨环境部署.而在跨环境部署时,经常会遇到某些环境的配置并不适用于另一环境,导致应用无法正常运行. 而profile恰好能解决这个问题. 二.概述 Profile 为不同环境下使用不同的配置提供了支持(开发环境下的配置和生成环境下的配置肯定不同,如数据库.加密算法等配置) 三.配置 Profile bean 要使用profile,首先要将所有不同的…
一.条件注解@Conditional 在之前的学习中,通过活动的profile,我们可以获得不同的Bean.Spring4提供了一个更通用的基于条件的Bean的创建,即使用@Conditional注解. @Conditional根据满足某一个特定条件创建一个特定的Bean.比方说,当某一个jar包在一个类路径下的时候,自动配置一个或多个Bean:或者只有某个Bean被创建才会创建另外一个Bean.总的来说,就是根据特定条件来控制Bean的创建行为,这样我们可以利用这个特性进行一些自动的配置. 下…
通过活动的profile,可以获得不同的Bean.Spring4提供了一个更通用的基于条件的Bean的创建,即使用@Conditonal注解 @Conditional根据满足某一个特定条件创建一个特定的Bean. 比如:当某一个jar包在一个类路径下的时候,自动配置一个或多个Bean:或者只有某个Bean被创建才会创建另外一个Bean. 总的来说,就是根据特定条件来控制Bean的创建行为,利用这个特性可以进行一些自动的配置. 在SpringBoot中将会大量应用到条件注解.…
之前有说到springboot自动装配的时候,都是去寻找一个XXXAutoConfiguration的配置类,然而我们的springboot的spring.factories文件中有各种组件的自动装配类,到底哪些应该生效,哪些又不生效呢?这个时候就要用到spring提供的条件注解了. 比如: @ConditionalOnJava                               系统的java版本是否符合要求 @ConditionalOnBean                    …