AOP: Aspect Oriented Programming 面向切面编程。

主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。
  主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改  变这些行为的时候不影响业务逻辑的代码。

让关注点代码与业务代码分离!

关注点,重复代码就叫做关注点;

关注点形成的类,就叫切面(类)!

面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候网业务方法上动态植入“切面类代码”。

执行目标对象方法,动态植入切面代码。

可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。

AOP底层实现原理

动态代理  CGLIB动态代理与JDK动态代理

java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

Spring中。

1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP

2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP

3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

JDK动态代理只能对实现了接口的类生成代理,而不能针对类 。
CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 。
因为是继承,所以该类或方法最好不要声明成final ,final可以阻止继承和多态。

Spring AOP的3种实现方式

1.基于xml配置的实现

2.注解版本实现AOP

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>  开启事物注解权限
@Aspect                            指定一个类为切面类
@Pointcut("execution(* com.itmayiedu.service.UserService.add(..))")  指定切入点表达式
@Before("pointCut_()")               前置通知: 目标方法之前执行
@After("pointCut_()")                后置通知:目标方法之后执行(始终执行)
@AfterReturning("pointCut_()")        返回后通知: 执行方法结束前执行(异常不执行)
@AfterThrowing("pointCut_()")            异常通知:  出现异常时候执行
@Around("pointCut_()")               环绕通知: 环绕目标方法执行

SpringAOP 学习笔记相关推荐

  1. springAop学习笔记(二,springboot进本配置和使用)

    配置 1.引入aop jar包 2.在主类上面加@EnableAspectJAutoProxy 这里要说一句:市面上常用有两种aop实现方式第一种是springaop,第二种是AspectJ,但是原始 ...

  2. SpringAOP学习笔记(一)——目标对象和代理对象

    一.目标对象和代理对象 目标对象:在SpringAOP被增强的对象 代理对象:通过aop中对目标对象进行增强,加入代理逻辑的而产生的对象 public interface Service {void ...

  3. SpringMVC框架--学习笔记(上)

    1.SpringMVC入门程序: (1)导入jar包:spring核心jar包.spring-webmvc整合Jar包 (2)配置前端控制器:web.xml文件中 <?xml version=& ...

  4. mybatis框架--学习笔记(下)

    上篇:mybatis框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81034021 8.高级映射: (1)一对一查询: ①使 ...

  5. [Spring+SpringMVC+Mybatis]框架学习笔记(四):Spring实现AOP

    上一章:[Spring+SpringMVC+Mybatis]框架学习笔记(三):Spring实现JDBC 下一章:[Spring+SpringMVC+Mybatis]框架学习笔记(五):SpringA ...

  6. Spring源码学习笔记:起源发展和核心模块主要职能

    1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 1.Spring 的前世今生 早在 2007 年,一个基于 Java语言的开源框架正式发布,取了一个非常有活力 ...

  7. Spring源码学习笔记:Spring设计模式对比和Spring的OOB,BOP,AOP,IOC,DI/DL

    1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 1.GOF 23总设计模式归纳 分类 设计模式 创建型 工厂方法模式(Factory Method).抽象工厂 ...

  8. Spring框架学习笔记,超详细!!(4)

    Java小白开始学习Spring框架,一方面,跟着视频学习,并记录下学习笔记,方便以后复习回顾.另一方面,发布学习笔记来约束自己,学习路程还很遥远,继续加油坚持!!!希望能帮助到大家! 另外还有我的牛 ...

  9. Spring 学习笔记----->AOP

    Spring 学习笔记----->AOP 代理模式 为什么学代理模式? 因为这就是Spring Aop的底层 代理模式的分类: 静态代理 动态代理 静态代理 生活用的例子: 房东 public ...

  10. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

最新文章

  1. js正则验证特殊字符
  2. 丰田chr优惠5万_精打细算还是英朗划算,优惠5万入手英朗,落地8.8万买贵了吗...
  3. python散点图拟合曲线-python曲线拟合
  4. jQuery,data()方法学习
  5. 段错误调试神器 - Core Dump详解
  6. mysql4.1加密_Java版Mysql4.1之前的old_password加密算法
  7. 一次java导出pdf的经历
  8. CSS 选择器优先级
  9. free,ps,抓包,网络状态
  10. unix 网络编程总结 二
  11. sourceInsight4 破解笔记(完美破解)【转】
  12. 视频、画面、语言、文字与脑海、心灵
  13. C++之sizeof(vector)
  14. Maxent Source code reading experience
  15. Nmap发现局域网中存活主机
  16. dnf服务器维护充钱能到账吗,DNF付费服务器故障!上百万点券充值石沉大海,程序员别睡觉啦!...
  17. 免费、无版权约束、可商用的优质图片素材网站合集
  18. Docker端口映射只有Ipv6端口导致Ipv4访问不通
  19. littlefs系列:Technical Specification
  20. 学生管理系统登录部分

热门文章

  1. 【转】编辑器与IDE
  2. iOS:选择器控件UIPickerView的详解和演示
  3. 物联网领域不断扩展,ATT很“兴奋”
  4. Macaca自动化测试Android和IOS应用
  5. 浅议磁盘分区——从MBR到GPT
  6. 常用正则表达式及基础语法
  7. archLinux 安装拼音输入法
  8. Linux系统维护人员的必备参考书
  9. 2. PHP 编译安装
  10. 94. autoload(2)