- Spring 核心功能
- IoC/DI 控制反转/依赖注入
- AOP 面向切面编程
一.IoC
- IoC 是什么?
1.1 IoC 完成的事情原先由程序员主动通过 new 实例化对象事情, 转交给 Spring 负责.
1.2控制反转中控制指的是:控制类的对象.
1.3控制反转中反转指的是转交给 Spring 负责.
1.4 IoC 最大的作用:解耦.
程序员不需要管理对象.解除了对象管理和程序员之间的耦合.
二. DI
- DI 是什么?
1.1 DI 和 IoC 是一样的
1.2当一个类(A)中需要依赖另一个类()对象时,把 B 赋值给 A 的过程就叫做依赖注入.
代码体现:
三.AOP
1. 正常程序执行流程都是纵向执行流程
1.1又叫面向切面编程,在原有纵向执行流程中添加横切面
1.2不需要修改原有程序代码
1.2.1具有高扩展性;
1.2.2原有功能相当于释放了部分逻辑.让职责更加明确.
2. 面向切面编程是什么?
2.1 在程序原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面过程就叫做面向切面编程.
3.常用概念
3.1 原有功能: 切点,pointcut
3.2 前置通知: 在切点之前执行的功能.beforeadvice
3.3 后置通知: 在切点之后执行的功能,afteradvice
3.4 如果切点执行过程中出现异常,会触发异常通知.throwsadvice
3.5 所有功能总称叫做切面.
3.6 织入: 把切面嵌入到原有功能的过程叫做织入
4.spring 提供了 2 种 AOP 实现方式
4.1Schema-based
4.1.1 每个通知都需要实现接口或类
4.1.2 配置 spring 配置文件时在<aop:config>配置
4.2AspectJ
4.2.1 每个通知不需要实现接口或类
4.2.2 配置 spring 配置文件是在<aop:config>的子标签<aop:aspect>中配置
四.Schema-based 实现步骤
1.导入 jar( aopalliance.jar 和 aspectjweaver.jar)
2. 新建通知类
2.1 新建前置通知类
2.1.1arg0: 切点方法对象 Method 对象
2.1.2arg1: 切点方法参数
2.1.3arg2:切点在哪个对象中
public class MyBeforeAdvice implements MethodBeforeAdvice {
@Override
public void before(Method arg0, Object[] arg1, Object
arg2) throws Throwable { System.out.println("执行前置通知");
} }
2.2 新建后置通知类
2.2.1arg0: 切点方法返回值
2.2.2arg1:切点方法对象
2.2.3arg2:切点方法参数
2.2.4arg3:切点方法所在类的对象
public class MyAfterAdvice implements AfterReturningAdvice {
&#