AOP原理

AOP简介

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

AOP应用范围

日志记录,跟踪,优化和监控,事务的处理,持久化,如数据库连接池的管理,系统统一的认证、权限管理等

Spring AOP

在Spring 中,虽然引入了AspectJ的语法,但是他本质上使用的是动态代理的方式.但即使是动态代理,也分两种实现模式:

1.使用接口(动态代理)

如果被代理的对象是面向接口编程的,那么Spring直接使用实现这些接口,然后把需要插入的内容在这个接口上下文中插入

使用ProXy,InvocationHandler类中的invoke方法进行实现

public Object invoke(Object proxy, Method method, Object[] args)

LogInterceptor li = new LogInterceptor();  //创建一个Handerler对象li.setTarget(userDAO);   //将Handler对象和被代理对象关联

 /*newProxyInstance参数含义
   * 第一个参数:代理的类加载器,必须和被代理的对象是一个类加载器
   * 第二个参数含义:代理对象要实现的那些接口
   * 第三个参数:指派方法调用的调用处理程序
* */
UserDAO userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(), userDAO.getClass().getInterfaces(), li);

2.使用继承(CGLIB)

如果被代理的对象没有基于接口编程,那么Spring会调用cglib库,通过子类继承的方式,动态插入需要的内容,并且调用父类的方法实现

cglib内部拥有一个小的字节码处理框架asm,来转换字节码生成新的类.所以spring调用了cglib,相当于生成了一个被代理对象的子类,来取代被代理对象.

posted @ 2017-06-13 17:09  雪萌的爸爸  阅读(133)  评论(0编辑  收藏  举报