控制反转(IoC)与依赖注入(DI)
IoC:即把创建对象交给了 IoC 容器处理,控制权颠倒过来了,这就是所谓的控制反转。
DI 是 Dependency Inject 的缩写,译为“依赖注入”。所谓依赖注入,就是由 IoC 容器在运行期间动态地将某种依赖关系注入对象之中。
依赖注入(DI)和控制反转(IoC)是对同一件事情的不同描述。
IoC/DI 通常有 setter(设置)注入和构造方法注入两种实现方式。
Spring 框架
Spring 框架的主要功能是通过其核心容器来实现的。Spring 框架提供的两种核心容器分别是:
-
BeanFactory
-
ApplicationContext。
Spring框架的两个最基本和最重要的包是:
-
org.springframework.beans.factory(该包中的主要接口是 BeanFactory)
-
org.springframework.context(该包中的主要接口是 ApplicationFactory)。
Spring IoC 框架
Spring IoC 框架的主要组件有:
-
Beans、
-
配置文件 applicationContext.xml、
-
BeanFactory 接口及其相关类、
-
ApplicationContext 接口及其相关类。
Beans 就是一个常见的 JavaBean、Java 类。
Bean 的作用域
singleton 是 Spring 容器默认的作用域,当 Bean 的作用域为 singleton 时,Spring 容器就只会存在一个共享的 Bean 实例,并且所有对 Bean 的请求,只要 id 与该 Bean 的 id 属性相匹配,就会返回同一个 Bean 的实例。
对需要保持会话状态的 Bean 应用使用 prototype 作用域。在使用 prototype 作用域时,Spring 容器会为每个对该 Bean 的请求都创建一个新的实例。
Spring AOP 简介
AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程。
目前流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ。Spring AOP 使用纯 Java 实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类植入增强的代码。
AspectJ 是一个基于 Java 语言的 AOP 框架,从 Spring 2.0 开始,Spring AOP 引入了对 AspectJ 的支持。
声明式事务管理
在需要使用事务的 Spring Bean 类或者 Bean 类的方法上添加注解@Transactional。如果将注解添加在 Bean 类上,就表示事务的设置对整个 Bean 类的所有方法都起作用;如果将注解添加在 Bean 类中的某个方法上,就表示事务的设置只对该方法有效。
MyBatis 概述
与 Hibernate 相比,虽然使用 MyBatis 手动编写 SQL 要比使用 Hibernate 的工作量大,但 MyBatis 可以配置动态 SQL 并优化 SQL,可以通过配置决定 SQL 的映射规则,它还支持存储过程等。
MyBatis 映射文件中常用标签和属性
标签
标签名 | 作用 |
---|---|
select | 查询操作 |
insert | 添加操作 |
update | 更新操作 |
delete | 删除操作 |
sql | 定义可重用的 SQL 代码片段,然后在其他语句中引用这一代码片段。 |
include | 它的 refid 属性引用了自定义的代码片段,refid 属性值为自定义代码片段的 id。 |
resultMap | 表示结果映射集,主要作用是定义映射规则、级联更新以及定义类型转化器等。 |
foreach | 一种用于数组和集合循环遍历的方式 |
foreach 标签
MyBatis 中已经提供了一种用于数组和集合循环遍历的方式,那就是使用 foreach 元素。
关于 foreach 元素中使用的几种属性的描述具体如下:
-
item:配置的是循环中当前的元素。
-
index:配置的是当前元素在集合中的位置下标。
-
collection:配置的 list 是传递过来的参数类型(首字母小写),可以是一个 array、list(或collection)、Map 集合的键、POJO 包装类中的数组或集合类型的属性名等。
-
open 和 close:配置的是以什么符号将这些集合元素包装起来。
-
separator:配置的是各个元素的间隔符。
MyBatis 中的关联关系
在关系型数据库中,多表之间存在3种关联关系,分别为一对一、一对多和多对多。
resultMap 元素中包含一个 association 子元素,MyBatis 就是通过该元素来处理一对一关联关系的。
在 association 元素中,通常可以配置以下属性。
-
property:指定映射到的实体类对象属性,与表字段一一对应。
-
column:指定表中对应的字段。
-
javaType:指定映射到实体对象属性的类型。
-
select:指定引入嵌套查询的子 SQL 语句,用于关联映射中的嵌套查询。
-
fetchType:指定在关联查询时是否启用延迟加载,有 lazy 和 eager 两个属性值,默认值为 lazy(默认关联映射延迟加载)。
resultMap 元素中包含一个 collection 子元素,MyBatis 就是通过该元素来处理一对多关联关系的。collection 子元素的属性大部分与 collection 元素相同,但其还包含一个特殊属性 ofType。ofType 属性与 javaType 属性对应,用于指定实体对象中集合类属性所包含的元素类型。
在 resultMap 元素中使用了 collection 元素来映射多对多的关联关系。
Spring MVC概述
Spring MVC 是 Spring 提供的一个轻量级 Web 框架,它实现了 Web MVC 设计模式。
POJO 类型
即简单的 Java 对象(Plain Ordinary Java Objects)实际就是普通 JavaBean。
JSON 数据交互
使用注解式开发时,需要用到两个重要的 JSON 格式转换注解 @RequestBody 和 @ResponseBody。
拦截器概述
Spring MVC 中的拦截器(Interceptor)类似于 Servlet 中的过滤器(Filter),它主要用于拦截用户请求并做相应的处理。
每天学习一点点,每天进步一点点。