AOP


AOP是指在jvm运行时, 动态将代码切入到指定位置.

OOP是一个维度上写代码, AOP是把他切开来, 变成立体的.

这样的好处是: 业务逻辑跟辅助逻辑分离,

例如日志打印, 性能监控, 安全控制等等, 代码不会搞的很冗余.

跟filter的区别有什么区别呢, 看上去filter也可以做上述事情,

有请求才会filter, filter也无法更细粒度的控制.

如何切开程序? 答: 通过修改字节码.

之前设计器那边用过AspectJ来实现静态的修改class切入, 这种其实不算动态修改.

因为他是编译过程中植入代码的. 例如对设计器中所有的mouse点击事件进行记录,

来回溯设计器制作模板的过程.

还有一种是通过asm框架动态的切入class.

ASM


asm是字节码框架, 可以动态增删改类的方法等属性.

字节码上一层是asm, asm上一层是cglib, 再上一层是应用层.

可以通过asm直接修改class, 也可以用javaassist来修改.

前者速度更快, 但是需要一点汇编命令, 后者是封装好的api.

实际使用场景


1, 插件的加载中, 在class加载之前增加一些方法.

2, 有一种破解方式就是运行过程中把他的字节码打印出来, 然后再反编译看class.

3, 比如想要修改某个jar里的class, 反编译出来可能错误多多, 可以通过javaassist来直接修改class.

4, javap查看字节码, 更深入的了解一段代码是如何执行的, 从哪个栈出来, 放到哪个栈里.

5, 之前介绍过的BTrace Greys等工具, 他们是attach到jvm上, 通过agent来加载脚本, 通过asm修改class.

产品中的运用


动态代理的两种方式, cglib和java原生的区别与优劣.

cglib不需要对象有接口, 他是用继承, 因此类不能是final的.

而java动态代理是通过接口的方式, 因为类需要有接口实现.

1.7里测试java动态代理更快.

如何使用上述两种


通过xml配置或者注解.

比如xml中指定某一个类, 某一个方法作为切入点.

或者扫描class method上的注解来判断是否需要植入代码.

初识AOP与动态代理的更多相关文章

  1. AOP与动态代理有什么联系

    曾遇到“AOP与动态代理有什么联系”的问题,现把个人观点整理如下: 我觉得,动态代理是AOP的主要实现手段之一,AOP是动态代理的一种应用深化 AOP是一种思想,或者是方法论,类似OOP,是OOP的有 ...

  2. 【Java EE 学习 51】【Spring学习第三天】【cglib动态代理】【AOP和动态代理】【切入点表达式】

    一.cglib动态代理 1.简介 (1)CGlib是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口. (2) 用CGlib生成代理类是目标类的子类. (3 ...

  3. 【spring 4】AOP:动态代理

    一.动态代理简介 动态代理与普通代理相比较,最大的好处是接口中声明的所有方法都被转移到一个集中的方法中处理(invoke),这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那 ...

  4. Spring核心框架 - AOP之动态代理机制

    动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码.动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类. ...

  5. Spring AOP 和 动态代理技术

    AOP 是什么东西 首先来说 AOP 并不是 Spring 框架的核心技术之一,AOP 全称 Aspect Orient Programming,即面向切面的编程.其要解决的问题就是在不改变源代码的情 ...

  6. 浅谈Spring的AOP实现-动态代理

    说起Spring的AOP(Aspect-Oriented Programming)面向切面编程大家都很熟悉(Spring不是这次博文的重点),但是我先提出几个问题,看看同学们是否了解,如果了解的话可以 ...

  7. Java基础---Java---基础加强---类加载器、委托机制、AOP、 动态代理技术、让动态生成的类成为目标类的代理、实现Spring可配置的AOP框架

    类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader 类加载器也是Jav ...

  8. AOP jdk动态代理

    一: jdk动态代理是Spring AOP默认的代理方法.要求 被代理类要实现接口,只有接口里的方法才能被代理,主要步骤是先创建接口,接口里创建要被代理的方法,然后定义一个实现类实现该接口,接着将被代 ...

  9. Spring学习-- AOP入门动态代理

    AOP 的拦截功能是由 java 中的动态代理来实现的.说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常 ...

随机推荐

  1. BZOJ-1968

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2308  Solved: 1768[Submit] ...

  2. Line belt

    Problem Description In a two-dimensional plane there are two line belts, there are two segments AB a ...

  3. IdentityServer4 禁用 Consent screen page(权限确认页面)

    IdentityServer4 在登录完成的适合,会再跳转一次页面(权限确认),如下: 我之前以为 IdentityServer4 就是这样使用的,但实际业务场景并不需要进行权限确认,而是登陆成功后直 ...

  4. 【转载】XSS学习笔记

    XSS的分类 非持久型 非持久型XSS也称反射型XSS.具体原理就是当用户提交一段代码的时候,服务端会马上返回页面的执行结果.那么当攻击者让被攻击者提交一个伪装好的带有恶意代码的链接时,服务端也会立刻 ...

  5. AngularJS学习篇(二十)

    AngularJS 包含 在 AngularJS 中,你可以在 HTML 中包含 HTML 文件. 使用 AngularJS, 你可以使用 ng-include 指令来包含 HTML 内容: < ...

  6. R-CNN论文翻译——用于精确物体定位和语义分割的丰富特征层次结构

    原文地址 我对深度学习应用于物体检测的开山之作R-CNN的论文进行了主要部分的翻译工作,R-CNN通过引入CNN让物体检测的性能水平上升了一个档次,但该文的想法比较自然原始,估计作者在写作的过程中已经 ...

  7. C#设计模式之十三代理模式(Proxy)【结构型】

    一.引言   今天我们要讲[结构型]设计模式的第七个模式,也是"结构型"设计模式中的最后一个模式,该模式是[代理模式],英文名称是:Proxy Pattern.还是老套路,先从名字 ...

  8. 【OpenCV】通过ROI区域以及掩码实现图像叠加

    在图像处理领域,我们常常需要设置感兴趣区域(ROI,region of interest),来专注或者简化我们的工作过程 .也就是从图像中选择的一个图像区域,这个区域是我们图像分析所关注的重点.我们圈 ...

  9. kickstart 实现批量安装centos7.x系统

    1.1 安装系统的方法 l  光盘(ISO文件,光盘的镜像文件)===>>每一台物理机都得给一个光驱,如果用外置光驱的话,是不是每台机器都需要插一下 l  U盘:ISO镜像刻录到U盘==& ...

  10. 基于Cef内核的多店铺登录器(含源码)

    公司是做电商的,在速卖通平台上开了若干店铺,每天都需要登录店铺打理,如:发货提交.获取运单号等.多个店铺的情况下,同时使用浏览器就会非常繁琐,如:要记住帐户名和密码,还要在不同店铺间切换.如果能够制作 ...