AOP底层原理

1.AOP底层使用动态代理

(1)有两种情况动态代理

第一种 有接口的情况,使用JDK动态代理

a.创建接口实现类代理对象,增强类的方法

第二种 没有接口的情况,使用CGLIB动态代理

a.创建子类的代理对象,增强类的方法

AOP(JDK动态代理)

1.使用JDK动态代理,使用java.lang包中的Proxy类里面的方法创建代理对象

(1)调用newProxyInstance方法

方法有三个参数:

第一个参数,类加载器

第二个参数,增强方法所在的类,这个类实现的接口,支持多个接口

第三个参数,实现这个接口InvocationHandler,创建代理对象,写增强的部分

2.编写JDK动态代理代码

(1)创建接口,定义方法

package com.atguigu.spring.dao;public interface UserDao {public int add(int a,int b);public String update(String id );}

(2)创建接口实现类,实现方法

package com.atguigu.spring.dao;public class UserDaoImpl implements UserDao {@Overridepublic int add(int a, int b) {return a+b;}@Overridepublic String update(String id) {return id;}
}

(3)使用Proxy类创建接口代理对象

package com.atguigu.spring.dao;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;public class JDKProxy {public static void main(String[] args){//创建接口实现类代理对象Class[] interfaces = {UserDao.class};UserDaoImpl userDao = new UserDaoImpl();UserDao dao = (UserDao)Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new UserDaoProxy(userDao));int  result = dao.add(1, 2);System.out.println(result);}
}//创建代理对象代码
class UserDaoProxy implements InvocationHandler
{//1.创建的是谁的代理对象,把谁传递过来//有参构造传递private Object obj;public UserDaoProxy(Object obj){this.obj = obj;}//增强的逻辑@Overridepublic Object invoke(Object o, Method method, Object[] objects) throws Throwable {//方法之前System.out.println("方法之前执行..."+method.getName()+"传递的参数..."+ Arrays.toString(objects));//被增强的方法执行Object res = method.invoke(obj, objects);//方法之后System.out.println("方法之后执行..."+obj);return res;}
}

[Spring5]AOP底层原理相关推荐

  1. AOP底层原理与注解配置详解

    注解开发AOP制作步骤: 在XML格式基础上 导入坐标(伴随spring-context坐标导入已经依赖导入完成 开启AOP注解支持 配置切面@Aspect 定义专用的切入点方法,并配置切入点@Poi ...

  2. SpringBoot3【① 基本框架原理+常用注解及其底层+AOP底层原理+yaml和日志框架】

    SpringBoot3-特性介绍和快速入门 1.简介 1. 前置知识 Java17 Spring.SpringMVC.MyBatis Maven.IDEA 2. 环境要求 环境&工具 版本(o ...

  3. Spring中的Aop底层原理

    Aop底层 aop底层使用的是动态代理,分为两种情况: 第一种:要增强的类实现了接口,使用JDK 动态代理 第二种: 没有接口情况,使用 CGLIB 动态代理 2.下面具体介绍下JDK动态代理 jdk ...

  4. 【Spring源码】Spring中的AOP底层原理分析

    AOP中的几个概念 Advisor 和 Advice Advice,我们通常都会把他翻译为通知,其实很不好理解,其实他还有另外一个意思,就是"建议",我觉得把Advice理解为&q ...

  5. Spring AOP底层原理

    什么是AOP AOP:Aspect Oriented Programing(面向切面编程) 采用横向抽取机制,取代传统继承体系重复性代码(性能监视.事务管理.安全检查.缓存)即代理机制 使用纯JAVA ...

  6. Spring AOP 底层原理_001----AspectJ与CGLIB介绍

    http://www.ibm.com/developerworks/cn/java/l-aspectJ/index.html中介绍了What is AspectJ . AspectJ是一个代码生成工具 ...

  7. 学习笔记——spring5概念和原理

    文章目录 一. spring5概述和原理 Spring5 框架概述 Spring5入门案例 IOC(概念和原理) IOC(BeanFactory 接口) IOC操作 Bean 管理(概念) IOC操作 ...

  8. Spring5底层原理 学习笔记(二)AOP篇

    文章目录 AOP实现之ajc编译器 AOP实现之agent类加载 AOP实现之动态代理 jdk动态代理 演示 模拟实现动态代理 动态生成代理类需要使用到asm的api,这里就不展开了 Jdk对于反射调 ...

  9. 深度学习Spring5底层原理(黑马学习随笔)

    学习随笔简介 跟随着黑马满老师的<黑马程序员Spring视频教程,全面深度讲解spring5底层原理>学习,视频教程地址:黑马程序员Spring视频教程,全面深度讲解spring5底层原理 ...

最新文章

  1. kube-proxy源码解析
  2. MATLAB从入门到精通:基本矩阵运算-矩阵的基本方法和函数
  3. SSH框架整合的流程
  4. 安卓牛客专项练习2020.12.10
  5. DropDownList.SelectedItem与DropDownList.SelectedValue的区别
  6. python实现冒泡排序视频_Python实现冒泡排序
  7. 【甘道夫】HBase基本数据操作的详细说明【完整版,精绝】
  8. CoreGraphics中CGContextAddArcToPoint函数的用法说明
  9. jsoup的Node类
  10. [DB]MYSQL外键(Foreign Key)的使用(转载)
  11. 阿里巴巴的26款超神Java开源项目!
  12. Unity/C# 随机生成中文名
  13. web学习笔记6 - TCP/IP五层协议簇
  14. matlab m序列扩频,基于matlab的移位寄存器法m序列的产生
  15. android oreo 老机型,三年的老机型,一加手机1也有安卓8.0了!
  16. Leetcode DAY6: 有效的字母异位词 and 两个数组的交集 and 快乐数 and 两数之和
  17. [IPTV]华为悦盒EC6108V9A刷机
  18. android解决kotlin问题Expecting member declaration
  19. sfc /scannow是什么意思,有什么作用?
  20. java正则中REGEX = [\u4e00-\u9fa5]+是什么意思

热门文章

  1. 电脑QQ能登上,网页打不开的解决办法
  2. ArcGIS Python
  3. linux shell之IFS分割字符串
  4. Android之popWindows底部弹出挡住了华为虚拟键盘问题
  5. class没有发布到tomcat_总在说SpringBoot内置了tomcat启动,那它的原理你说的清楚吗?
  6. 如何用数学方法估算一个女生前男友的数量?
  7. 图像还可以这样玩!如何用OpenCV处理图像?
  8. 这就是你在妈妈肚子里尿尿的样子 | 今日最佳
  9. 50种奇妙装置玩法,将STEM教育一网打尽
  10. 推荐7个高质量的学术公众号