Spring AOP 学习之cJlib动态代理

来源:互联网 发布:数据挖掘要学哪些东西 编辑:程序博客网 时间:2024/05/17 02:16

cjlib动态代理,首先需要导入包:cglib-nodep-2.1_3.jar
然后基本的写法与JDK的动态代理相同。
只是在代理类有些不一样。

package com.yc.advice;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;//这个类是一个切面类, 完成的功能是向目标类的目标方法加入功能( 增强)public class RightAdvice implements MethodInterceptor {    //代理模式中一定要有目标类的引用    private Object targetObject;  //注意,这个就是目标类的引用    @Override    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy arg3) throws Throwable {        String methodName=method.getName();        if(  methodName.startsWith("add")  ||  methodName.startsWith("del")|| methodName.startsWith("update") || methodName.startsWith("modify")  ){            //在invoke中加入您要增强的代码            check();   //前置增强        }        //调用目标的对应的方法        Object returnValue=method.invoke(targetObject, args);   // object is not an instance of declaring class        return returnValue;    }    //创建一个方法来完成创建代理对象    public Object createInstance( Object  targetObject  ){        this.targetObject=targetObject;   //  => Object        Enhancer enhancer=new Enhancer();        enhancer.setSuperclass(   targetObject.getClass() );        //enhancer.setClassLoader(   targetObject.getClass().getClassLoader()  );        enhancer.setCallback(    this  );        return enhancer.create();  //创建代理类对象.    }    //增强    private void check(){        System.out.println("***********************************");        System.out.println("权限检查");        System.out.println("***********************************");    }}
0 0
原创粉丝点击