aop难点解析。
静态织入和动态织入的区别?
需求示例:假设有一个包,一个包当中有一个方法,我们想在这个方法的前后,加上环绕。
那么怎么加呢?
把知道的都说一遍。
1.建立JsonService
2.建立JSONASPECT,这个类是一个Bean,它使用了@Aspect
3.写XML文件。
3.1静态织入 (好处就是:编译的时候织入,无性能压力)
3.2 动态织入
问:动态织入比静态织入灵活在哪个地方?
如果是动态织入,那么是运行时,。。。不晓得怎么回答。
比如JointPoint(拦截点吧),什么时候拦截,靠什么东西拦截,什么时候可以触发拦截点,这些拦截点有没有什么规律?
Join Point可以是任何点,那么对应Aop的织入点又是什么意思呢?
那就要考虑到pointCut了,AOP的pointCut的粒度是方法,对于一个方法,可能有很多的aspect.
还有一个问题是:PointCut的正则表达式怎么写?
答:
SPRING动态代理有哪些?cglib和jdk动态代理。
区别:JDK动态代理,需要创建接口,但是cglib不需要。
JDK动态代理:Proxy.newProxyInstance(targetAspectClass);(问:为什么可以这么做?)
aop包括静态织入和动态代理,动态代理又分为jdk代理和cglib代理,
pointcut正则表达式的写法:
有三种,一种是execution,一种是annonation,一种是within(这种TMD还没研究过的!!!)
就拿execution来说吧,首先是 * * public ..(..)<---xxxx又忘记鸟。
你能给我演示一下静态织入吗?
编译时织入,利用的是ASPECTJ的特性去织入。
那什么是动态织入呢?
利用JDK代理,Proxy类里面的newProxyInstance去进行织入。
这个类必须实现InvocationHandler,然后里面有一个CreateNewInstance方法,然后这个类里面还有一个invoke方法,这个里面又包含了一个invoke方法,里层的invoke方法,其实是虚拟机去调用的,也就是和JVM有关的,它调用前后就是一个JointPoint process.proceed()方法,调用这个东西,其实就是完成了这个方法,在before和after这个方法的前后,就会记录日志。
问:aspect和advisor有什么区别?不知道!!!!
问个问题,cglib代理和jdk代理的区别。
jdk动态代理的invoke方法什么时候会被调用?
我总算是弄明白了,原来这和InvokationHanlder接口里面的实现类的构造函数有关系,构造函数里面用不仅会初始化父类的构造函数,还会把当前代理类所关联的类一并注入进去。
在newProxyInstance方法里面,其实生成的是一个带有InvocationHanlder功能的一个代理类,你所使用的真实方法当中的INVOKE方法,会在你调用真实方法的时候,转换成这个INVOKE方法,也就是说你调用了a方法,其实并不是调用的A方法,
而是调用的invoke方法,A方法只是作为一个参数,被传递到了INVOKE里面,真正调用A方法的时候,是在内层的一个.invoke的一个反射方法的时候去调用,这样就实现了AOP日志处理。
aop难点解析。的更多相关文章
- .NET_RSA加密全接触(重、难点解析)
.NET_RSA加密全接触(重.难点解析) .NET Framework提供了两个类供我们使用RSA算法,分别是:用于加密数据的RSACryptoServiceProvider和用于数字签名的DSAC ...
- STM32 CAN总线标识符过滤器难点解析
STM32 CAN总线标识符过滤器难点解析 原创 2016年05月31日 15:12:24 标签: stm32 / CAN 4910 CAN总线是目前应用非常多的一种总线,在汽车电子,航空航天中应用广 ...
- spring AOP XML解析
<aop:config> 标签的解析: <bean id="loggingAspect" class="com.zhuguang.jack.aop.as ...
- Spring源码分析之AOP从解析到调用
正文: 在上一篇,我们对IOC核心部分流程已经分析完毕,相信小伙伴们有所收获,从这一篇开始,我们将会踏上新的旅程,即Spring的另一核心:AOP! 首先,为了让大家能更有效的理解AOP,先带大家过一 ...
- Spring笔记(3) - debug源码AOP原理解析
案例 @EnableAspectJAutoProxy//开启基于注解的aop模式 @Configuration public class AOPConfig { //业务逻辑类加入容器中 @Bean ...
- [Solution] AOP原理解析及Castle、Autofac、Unity框架使用
本节目录: AOP介绍 AOP基本原理 AOP框架 Castle Core Castle Windsor Autofac Unity AOP介绍 面向切面编程(Aspect Oriented Prog ...
- 中间件(WAS、WMQ)运维 9个常见难点解析
本文由社区中间件达人wangxuefeng266.ayy216226分享整理,包括WAS.WMQ在安装.巡检.监控.优化过程中的常见难点. 安装 1.was 负载均衡的机制的粘连性,was负载均衡异常 ...
- AOP原理解析及Castle、Autofac、Unity框架使用
转自:https://www.cnblogs.com/neverc/p/5241466.html AOP介绍 面向切面编程(Aspect Oriented Programming,英文缩写为AOP), ...
- Spring AOP前置通知实例讲解与AOP详细解析
一.引出问题 有个接口TestServiceInter,有两个实现方法TestService和Test2Service.他们都有sayHello():我们的需求是在调用这两个方法之前,要先完成写日志的 ...
随机推荐
- Error : Invalid Allocation Size :·····Bytes 以及 abort() has been called
把这两个Error放在一起,主要是因为在写代码的时候发现,他们有公共的错误. (一)Invalid Allocation Size 主要是因为new分配内存出了问题,从直观翻译来看,应该是内存分配长度 ...
- UVA 10881 - Piotr's Ants【模拟+思维】
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- SQL强化(二) 在Oracle 中写代码
一 : 关于查询中的转换 -- 字符串转换 一 : decode 函数 转换 SELECT DECODE ( PROTYPE.PRO_TYPE_DATE, 'L', '长', 'm', '短', ' ...
- [学习OpenCV攻略][013][Mat - 基本图像容器]
Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针. 矩阵属于多个 Mat 对象, ...
- [学习OpenCV攻略][003[初试牛刀——显示图片]
cvLoadImage(路径) 加载指定路径的图片到内存 cvNamedWindow("窗口名称", 属性) 创建窗口,窗口名称用来被其他函数引用,属性:0表示窗口大小不变,CV_ ...
- the server responded with a status of 414 (Request-URI Too Large)
nginx 配置不当,前端ajax调用报错: the server responded with a status of 414 (Request-URI Too Large) 浏览器F12报错如下: ...
- Python 使用 virtualenvwrapper 安装虚拟环境
装载于https://www.jianshu.com/p/9f47a9801329 Python 使用 virtualenvwrapper 安装虚拟环境 Tim_Lee 关注 2017.05.04 2 ...
- nginx重启几种方法
http://blog.csdn.net/zqinghai/article/details/71125045 ps -ef|grep nginx 平滑重启命令: kill -HUP 住进称号或进程号文 ...
- mysql之repair table 修复表札记
REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[,tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] REP ...
- Python3 引入模块的方法
例子 import random 产生随机整数 import random secret = random.randint(0,10)