IOC核心思想

资源不再由使用资源的双方管理,而由不使用资源的第三方管理(Spring就是管理项目实例资源的第三方)。
1.资源集中管理,实现资源的可配置和易管理。
2.降低了使用资源双方的耦合度

Spring是一个IOC和AOP的容器框架
IOC是对象实例化的过程,并使用容器进行管理对象;
DI是属性注入的过程;
AOP是面向切面编程

image.png

一、Spring框架整体介绍

1.Spring Core Container

Core和Beans模块是框架的基础部分,提供IOC和DI特性。
BeanFactory是基础概念,提供了对Factory模式的经典实现,来消除对程序性单例模式的需求,并真正允许从程序逻辑中分离出依赖关系和配置。

1.1)Core

主要包含Spring框架基本的核心工具类,Spring的其他组件都要用到此包里的类,Core模块是其他组件的基本核心
对应模块:spring-core

1.2)Beans(BeanFactory的作用)

包含访问配置文件、创建和管理bean以及进行IOC、DI操作的所有类。
对应模块:spring-beans

1.3)Context

context模块构建在Core和Beans模块基础之上,提供类似JNDI注册器的框架式的对象访问方法。
Context模块继承了Beans的特性,为Spring核心提供了大量扩展,添加了对国际化(例如资源文件绑定)、事务传播、资源加载和对Context的透明创建支持。
Context模块同时支持J2EE特性,ApplicationContext接口是Context模块的关键

本质区别:BeanFactory的bean是延迟加载、ApplicationContext是非延时加载。

对应模块:spring-context

1.4)Expression Language(SpEl)

提供了强大的表达式语言,用于在运行时查询和操纵对象。 它是 JSP 2.1 规范中定义的 unifed expression language 的扩展。
该语言支持
设置、获取属性的值
属性的分配
方法的调用
访问数组上下文( accessiong the context of arrays)
容器和索引器???
逻辑和算术运算符
命名变量
从Spring的 IoC 容器中根据名称检索象
list 投影、选择和一般的 list 聚合

对应模块:spring-expression

2.Spring Data Access/Integration

2.1)JDBC

提供了一个 JDBC 抽象层,它可以消除冗长的 JDBC 编码和解析数据库厂 商特有的错误代码。包含了 Spring 对 JDBC 数据访问进行封装的所有类

2.2)ORM (流行的对象-关系映射 API)

如 JPA、 JDO、 Hibernate、 iBatis 等,提供了 一个交互层。 利用 ORM 封装包,可以混合使用所有 Spring 提供的特性进行 O/R 映射, 如前边提到的简单声明性事务管理。

2.3)OXM(对Object XML 映射实现的抽象层)

Object/XML 映射实现包括 JAXB、 Castor、 XMLBeans、 JiBX 和 XStrearn

2.4)JMS ( Java Messaging Service )

模块主要包含了 一些制造和消费消息的特性。

2.5) Transaction

支持编程和声明性的事务管理,这些事务类必须实现特定的接口,并且对所有的 POJO 都适用.

3: Spring Web

提供了基础的面向Web 的集成特性。
例如,多文件上传、使用 servlet listeners 初始化IoC容器以及一个面向 Web 的应用上下文。它还包含 Spring 远程支持中 Web 的相关部分。

4: Spring Aop

4.1)Aspects

模块提供了对 AspectJ 的集成支持。

4.2)Instrumentation

模块提供了 class instrumentation 支持和 classloader 实现,使得可以在特定的应用服务器上使用

5:Test

Test 模块支持使用 JUnit 和 TestNG 对 Spring 组件进行测试

6.容器继承关系图

image.png

二、AOP技术使用

通知:就是切面中的方法(切面是为了增强或者完善目标接口)
代理对象的方法=通知+目标方法
连接点:是目标接口中的一个方法而已
拦截器中的invoke方法就是代理对象的方法=通知+目标方法
现实开发中,通知和目标方法是完全松耦合的
如果目标对象实现了接口,那么Spring会使用jdk的动态代理产生代理对象
如果目标对象没有实现接口,那么Spring会使用cglib产生代理对象。

AOP基于注解的使用

参考文档:https://github.com/DocsHome/spring-docs/blob/master/pages/core/overview.md