Spring(十九):Spring 父子容器
Spring 的IoC容器可以建立父子层级关联的容器体系,子容器可以访问父容器中的Bean,但父容器不能访问子容器中的Bean。
在容器内,Bean的id必须是唯一的,但子容器可以拥有一个和父容器id相同的Bean。父子容器体系增强了Spring容器架构的扩展性和灵活性,第三方可以通过HierarchicalBeanFactory接口,为一个已经存在的容器添加一个或多个特殊用途的子容器,以提供一些额外的功能。
Spring 的IoC容器可以建立父子层级关联的容器体系,子容器可以访问父容器中的Bean,但父容器不能访问子容器中的Bean。
在容器内,Bean的id必须是唯一的,但子容器可以拥有一个和父容器id相同的Bean。父子容器体系增强了Spring容器架构的扩展性和灵活性,第三方可以通过HierarchicalBeanFactory接口,为一个已经存在的容器添加一个或多个特殊用途的子容器,以提供一些额外的功能。
IoC(Inverse of Control)控制反转:不是某种技术,而是一种设计思想,Spring IoC容器是该设计思想的实现。
控制反转包含两层意思,一是控制,二是反转。
DI(Dependency Injection)依赖注入:是组件之间、对象之间的依赖关系由容器在运行期决定,即由容器动态的将某个依赖对象注入到组件中。
控制反转和依赖注入实际说的是同一件事,只是站在两个对立的角度来解释这件事。控制反转是站在调用者的角度来理解,本来由我自己来创建对象的,现在不需要这么做了,由容器直接给你所需要的;依赖注入是站在容器的角度来理解,你需要什么,我找到给你就是,你没必要自己创建了。
Spring 项目经常需要拿到上下文,通过上下文来获取 IoC 容器中注册的 Bean。
获取上下文有好几种方式,可以实现 ApplicationContextAware 接口,可以通过 ServletContext 获取,而通过 ContextLoader 来获取上下文在 Spring Boot 中并不适用,适用于 Spring 项目。
整理历史项目,Mybatis 配置文件及整合Spring,主要配置记录。只做参考,实际开发已不使用此配置。
Spring的事件(Application Event)为Bean与Bean之间的消息通信提供了支持。当一个 Bean处理完一个任务之后,希望另外一个Bean知道并能做相应的处理,这时需要让另外一个Bean监听当前Bean所发送的事件。
一次因升级 JDBC 驱动导致生产环境数据库时间与服务器时间相差+13个小时。
1 | [mysqld] |
spring.datasource.url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&serverTimezone=GMT%2B8
Spring提供了强大的注解功能,有部分注解是以@Enable*开头的,表示开启某项功能,本文汇总下此类注解。
AspectJ自动代理的支持。@ConfigurationProperties注解配置Bean的支持。Spring Data JPA Repository的支持。Spring 提供了@Value注解来支持资源的注入,可以很便捷的让属性值注入到组件中,当值不存在可以设置一个默认值。
@Value 注解还可以结合 Spring EL 表达式获取 Spring 容器中的 Bean 的值,以 #{}进行表达式声明。
${}声明,从外部配置的参数取值。#{}声明,使用表达式获取变量的值。#{}与 ${}可以混合使用,必须是 #{}在外,${}在里面。支持编码转换
escapeXml unEscapeXml。
此外,还支持html. java. JavaScript. sql. csv等
支持编码转换
escapeJson unEscapeJson。
此外,还支持html. java. JavaScript. sql. csv. xml等
Spring 提供了一个通用的基于条件来创建Bean的注解@Conditional注解。
通过实现Condition接口,并重写其matches方法来构造判断条件。