Spring AOP 学习之cglib动态代理
cglib动态代理,首先需要导入包:cglib-nodep-2.1_3.jar 然后基本的写法与相同。 只是在代理类有些不一样。
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("***********************************"); } }