静态织入和动态织入的区别?

需求示例:假设有一个包,一个包当中有一个方法,我们想在这个方法的前后,加上环绕。

那么怎么加呢?

把知道的都说一遍。

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难点解析。的更多相关文章

  1. .NET_RSA加密全接触(重、难点解析)

    .NET_RSA加密全接触(重.难点解析) .NET Framework提供了两个类供我们使用RSA算法,分别是:用于加密数据的RSACryptoServiceProvider和用于数字签名的DSAC ...

  2. STM32 CAN总线标识符过滤器难点解析

    STM32 CAN总线标识符过滤器难点解析 原创 2016年05月31日 15:12:24 标签: stm32 / CAN 4910 CAN总线是目前应用非常多的一种总线,在汽车电子,航空航天中应用广 ...

  3. spring AOP XML解析

    <aop:config> 标签的解析: <bean id="loggingAspect" class="com.zhuguang.jack.aop.as ...

  4. Spring源码分析之AOP从解析到调用

    正文: 在上一篇,我们对IOC核心部分流程已经分析完毕,相信小伙伴们有所收获,从这一篇开始,我们将会踏上新的旅程,即Spring的另一核心:AOP! 首先,为了让大家能更有效的理解AOP,先带大家过一 ...

  5. Spring笔记(3) - debug源码AOP原理解析

    案例 @EnableAspectJAutoProxy//开启基于注解的aop模式 @Configuration public class AOPConfig { //业务逻辑类加入容器中 @Bean ...

  6. [Solution] AOP原理解析及Castle、Autofac、Unity框架使用

    本节目录: AOP介绍 AOP基本原理 AOP框架 Castle Core Castle Windsor Autofac Unity AOP介绍 面向切面编程(Aspect Oriented Prog ...

  7. 中间件(WAS、WMQ)运维 9个常见难点解析

    本文由社区中间件达人wangxuefeng266.ayy216226分享整理,包括WAS.WMQ在安装.巡检.监控.优化过程中的常见难点. 安装 1.was 负载均衡的机制的粘连性,was负载均衡异常 ...

  8. AOP原理解析及Castle、Autofac、Unity框架使用

    转自:https://www.cnblogs.com/neverc/p/5241466.html AOP介绍 面向切面编程(Aspect Oriented Programming,英文缩写为AOP), ...

  9. Spring AOP前置通知实例讲解与AOP详细解析

    一.引出问题 有个接口TestServiceInter,有两个实现方法TestService和Test2Service.他们都有sayHello():我们的需求是在调用这两个方法之前,要先完成写日志的 ...

随机推荐

  1. deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面 听课笔记

    1. 应用机器学习是高度依赖迭代尝试的,不要指望一蹴而就,必须不断调参数看结果,根据结果再继续调参数. 2. 数据集分成训练集(training set).验证集(validation/develop ...

  2. BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4210  Solved: 1908[Submit][Sta ...

  3. springboot注解使用说明

    springboot注解 @RestController和@RequestMapping注解 我们的Example类上使用的第一个注解是 @RestController .这被称为一个构造型(ster ...

  4. 国寿e店/人寿云参会云助理,不去公司就能刷脸考勤打卡?

    自从2017年3月平安保险公司实行E行销打卡考勤以来,保险增员迅猛增加,保险业绩也随之水涨船高.年底开始中国人寿保险也陆续开始实行app考勤,有些需要连接公司指定WiFi,或在指定地点方可打卡考勤.不 ...

  5. 百万级别QPS轻量级PHP框架Steeze介绍

    系统简介   Steeze是一个优雅.简洁而又高效的PHP开源框架,在整合了知名框架ThinkPHP和Laravel优点的同时,重写了底层架构,增强了功能实现. 支持swoole模型运行,支持容器.模 ...

  6. [知了堂学习笔记]_css3特效第一篇--旋转的背景&翻书效果

    一.html遮盖层与css3的旋转动画 >效果图(加载可能会慢一点儿,请稍等...): >实现思路:在一个大的div中装入一个底层img和顶层的div(里面的内容按照以上图片呈现的样式布局 ...

  7. mysq开启慢查询

    1 将未建立索引的sql放到慢查询日志中 查看 log_queries_not_using_indexes 是否为on show variables like 'log%'; 将 log_querie ...

  8. [Qt Quick] No rule to make target问题解决办法

    [问题描述] 修改项目中资源的qml文件名或删除无用资源文件后,重新构建项目时,会出现类似如下的问题提示: No rule to make target 'aaa', needed by 'bbb'. ...

  9. Servlet--j2e中文乱码解决

    我们在写项目的时候经常会传递一些中文参数,但是j2e默认使用ISO-8859-1来编码和解码,所以很容易出现中文乱码问题.这里我做一个统一的整理,其实这里的中文乱码问题和上一篇的路径问题都是j2e经常 ...

  10. SCOPE_IDENTITY()

    @@IDENTYITY,SCOPE_IDENTITY的主要区别:在有触发器中而且触发器的内容里面含有插入标识符的操作的时候,@@IDENTITY则返回的是触发器里面新插入标识符的值而SCOPE_IDE ...