美文网首页
spring-aop一些知识

spring-aop一些知识

作者: 多关心老人 | 来源:发表于2018-01-11 23:02 被阅读0次

参考:http://blog.csdn.net/wenbingoon/article/details/8988553
代理分静态和动态2中,静态代理是在编译前手动写源码如jdk静态代理(基本没啥用)和编译期改写字节码(如Aspect工具),Aspect提供了ajc命令(可以看作javac的变种),根据aspect自己的源码文件来改写生成的.class文件。
动态代理指基于接口的动态代理和基于cglib生成子类的动态代理。


asm,cglib,spring-aop,aspectj和jdk动态代理是什么关系?
asm是一个操作.class自己码的类库,由于比较复杂在其上封装了一层cglib,aspect是eclipse的一个项目,和spring-aop等基本没有关系,是一个独立的项目,包括Advice和PointCut等规则定义以及编译期等工具。spring-aop是参考并使用的aspect的Advice和PointCut等规则定义,但是没有使用编译工具,因此spring-aop用的是jdk或cglib的动态代理(如果没定义proxy-target-class=true则spring-aop会自动判断有interface就走jdk动态代理,没有就走cglib,如果定义为true则全部走cglib)。
从spring3.2+开始,spring-core集成了cglib代码(但是看不到源码),但是spring并没有继承aspectj的代码(猜测可能是版权原因),因此如果代码中用到了@Apect,@Before及<aop:advice>, <aop:config>需要将aspectjweaver.jar包括进pom.xml。

使用jdk动态代理的时候,如果一个方法调用兄弟方法,则兄弟方法不会被代理。因为在invoke中真正干活的还是被代理对象,被代理对象的.class文件并没有被改变。而cglib代理改变了.class,会对每一个对象方法都进行拦截。

jdk代理是通过invocation handler+代理去植入切面逻辑和执行业务逻辑。
cglib是通过method interceptor+代理去植入切面逻辑和执行业务逻辑。代理执行业务逻辑是通过jdk反射方式。典型应用是spring声明式事务。


问题:service层有事务拦截和druid监控拦截,那么这2个拦截谁先谁后?

相关文章

  • spring-aop一些知识

    参考:http://blog.csdn.net/wenbingoon/article/details/898855...

  • spring-AOP(二) 自动代理

    spring-AOP(二) 自动代理 知识导读 在何时何处创建代理对象,如何能覆盖被代理对象,返回代理后的对象 自...

  • 自定义注解,aop+redis,实现controller接口频率

    1,环境配置 引入aop的jar包compile 'org.springframework:spring-aop:...

  • spring-4.3.4.RELEASE集成AOP 实战

    一、依赖引入 (包括 spring-aop 以及 aspectj) 二、切面配置代码 (使用 javaConfig...

  • spring-AOP

    Aspects,切面 spring-aop 是spring-aspects的上层建筑 targetClass Me...

  • spring-aop

    aop概念aop概念aop术语AOP实现方式1、spring-aop(使用xml文件实现AOP)2、AspectJ...

  • spring-aop

    Aop-面向切面编程,在程序中主要用来解决一些系统层面上的问题,比如:日志,事务,权限等。 aop的一些基本概念:...

  • spring-aop

    1, aop的两种实现机制动态代理:利用jdk/cglib动态代理,性能弱一丢丢 jdk动态代理:所有的方法调用被...

  • spring-aop

  • Spring-AOP

    AOP的概念 面向切面的编程,切面用于描述分散在对象、类或者函数中的横向关注点,通过分离这些关注点,把解决特定领域...

网友评论

      本文标题:spring-aop一些知识

      本文链接:https://www.haomeiwen.com/subject/taewbxtx.html