AOP的另一种实现—-cglib

  大家都知道,美国空间,动态代理能够实现AOP,香港虚拟主机,但是它有一个缺点,就是所有被代理的对象必须实现一个接口,否则就会报异常。那么如果被代理对象没有实现接口那该如何实现AOP呢?当然是能的,使用CGlib就可以实现。

  1、什么是CGlib

  可能大家还感觉不到它的强大,现在就告诉你。实际上CGlib为spring aop提供了底层的一种实现;为hibernate使用cglib动态生成VO/PO (接口层对象)。

  它的原理就是用Enhancer生成一个原有类的子类,并且设置好callback , 则原有类的每个方法调用都会转成调用实现了MethodInterceptor接口的proxy的intercept() 函数:public Object intercept(Object o,Method method,Object[] args,MethodProxy proxy)  在intercept()函数里,你可以在执行Object result=proxy.invokeSuper(o,args);来执行原有函数,在执行前后加入自己的东西,改变它的参数,也可以瞒天过海,完全干别的。说白了,就是AOP中的around advice。

  2、如何使用CGlib

  举个例子:比如DAO层有对表的增、删、改、查操作,如果要对原有的DAO层的增、删、改、查增加权限控制的话,修改代码是非常痛苦的。所以可以用AOP来实现。但是DAO层没有使用接口,动态代理不可用。这时候CGlib是个很好的选择。

TableDao.java:

1 package com.cglib; TableDao { create(){ 5System.out.println(“create() is running…”); 6 } delete(){ 8System.out.println(“delete() is running…”); 9 } update(){11System.out.println(“update() is running…”);12 } query(){14System.out.println(“query() is running…”);15 }16 },网站空间今天的长相厮守,只是尽力而为而已。

AOP的另一种实现—-cglib

相关文章:

你感兴趣的文章:

标签云: