spring的俩大核心概念:IOC和AOP
目录
前言
此篇仅为个人初期学习笔记,如有错误,请xdm指正
一、AOP基本概念
1.简介
- AOP的意思是面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,把大问题拆分成小问题从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
- 可以这样理解:在不修改源代码的基础上,增加新的功能。
- 修改源代码,成本极大,伤筋动骨。
2.案例理解
用户登录,需要添加一个权限判断的功能
二、AOP实现方式(动态代理)
1.有接口
使用 JDK动态代理:使用proxy类里面的方法创建对象
实质:创建接口实现类的代理对象
通过Proxy的newProxyInstence方法
三个参数
第一个参数:类加载器,传递一个类的class对象
第二个参数:增强方法所在的类实现的接口,是一个数组,意味着可以是多个
第三个参数:代理类,创建一个类实现接口InvocationHandle,创建代理对象,写增强方法
2.无接口
使用CGLIB动态代理
创建子类的代理对象
3.关键术语
1.连接点
类中可以被增强的方法
2.切入点
类里面实际被增强的方法
3.通知(增强)
(1)增强的逻辑部分称为通知(增强的功能)
(2)通知的类型:
前置通知:在功能的前面进行增强
后置通知:在功能的后面进行增强
环绕通知:在功能的前后都进行增强
异常通知:当出现异常时,执行的代码
最终通知finally:无论如何最终都会执行的代码
4.切面
把通知运用到切入点的过程,简单理解:把增强的代码放入整个项目中
5.实现AOP操作
a>介绍
- Spring框架一般都是基于AspectJ实现AOP操作的
- AspectJ不是Spring的组成成分,独立于AOP框架
一般把AspectJ和Spring框架一起使用,进行AOP操作 - 切入点表达式
使用切入点表达式,可以让spring知道对哪个类中的哪个方法进行增强
execution([权限修饰符][返回值类型][类全路径][方法名称][参数列表])
b>基于AspectJ实现AOP
- 注解实现
争对不同的通知提供不同的方法,加上对应的注解 - XML配置文件实现
a> 提取公共切入点
争对不同的通知@PointCut(value = “execution()”) - 增强类的优先级
- 完全注解开发:争对不同的通知
- 用配置类替换配置文件
- @Configuration----注明配置类
- @ComponentScan(basePackges=(“…”))----开启组件扫描
- @EnableAspectJAutoProxy(proxyTargetClass=true)