package CglibProxy; import java.lang.reflect.Method; import org.springframework.asm.AnnotationVisitor; import org.springframework.asm.Attribute; import org.springframework.asm.Label; import org.springframework.asm.MethodVisitor; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class MyInvocationHandler implements MethodInterceptor{ private Object target;//代理真实的实现类 private Transcation transaction;//事务 public MyInvocationHandler(Object target, Transcation transaction) { this.target = target; this.transaction = transaction; } /** * 创建代理对象 * <p>Title: createProxy</p> * <p>Description: </p> * @return */ public Object createProxy(){ Enhancer enhancer = new Enhancer(); enhancer.setCallback(this);//this代表拦截器对象 enhancer.setSuperclass(target.getClass());//设置代理类的父类为目标类 return enhancer.create(); } /** * 该方法的内容和jdkpoxy中的invoke方法的内容是一样的 */ public Object intercept(Object arg0, Method method, Object[] args, MethodProxy arg3) throws Throwable { this.transaction.beginTransaction(); method.invoke(this.target, args); this.transaction.commit(); return null; } }
package CglibProxy; public class TestProxy { public static void main(String[] args) { PersonDaoImpl target = new PersonDaoImpl(); Transcation transaction = new Transcation(); MyInvocationHandler myInvocationHandler = new MyInvocationHandler(target, transaction); //调用动态生成的target对象PersonDaoImpl PersonDaoImpl proxy = (PersonDaoImpl)myInvocationHandler.createProxy(); proxy.savePerson(); } }