标签:
cglib-nodep-2.1_3.jar cglibjar包
事务
package com.spring.cglibproxy;
public class Transaction {
public void beginTransaction(){
System.out.println("begin transcation");
}
public void commit(){
System.out.println("commit");
}
}
拦截器
package com.spring.cglibproxy;
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 MyInterceptor implements MethodInterceptor {
private Object target; //目标类
private Transaction transaction; //事务
public MyInterceptor(Object target, Transaction transaction) {
super();
this.target = target;
this.transaction = transaction;
}
//创建代理对象
public Object createProxy(){
Enhancer enhancer=new Enhancer();//代码增强类
enhancer.setCallback(this);//参数为拦截器
enhancer.setSuperclass(target.getClass());//生成的代理类的父类是目标类
//创建代理对象
return enhancer.create();
}
@Override
public Object intercept(Object arg0, Method method, Object[] arg2,
MethodProxy arg3) throws Throwable {
this.transaction.beginTransaction();
method.invoke(target);
this.transaction.commit();
return null;
}
}
目标类
package com.spring.cglibproxy;
public class PersonDaoImpl {
public void savePerson() {
System.out.println("save person");
}
public void updatePerson() {
System.out.println("update Person");
}
}
测试
package com.spring.cglibproxy;
import org.junit.Test;
/**
* 通过CGlib产生的代理对象,代理类是目标类的子类
*
* jdkProxy和cglib的区别:
* cglibproxy生成的是代理类是目标类的子类
* jdkproxy 是代理类和目标类实现了共同的接口
*
*
*/
public class cglibProxyTest {
@Test
public void testcglib(){
Object target=new PersonDaoImpl();
Transaction transaction=new Transaction();
MyInterceptor interceptor=new MyInterceptor(target, transaction);
//创建代理类返回目标类,可以不需要接口
PersonDaoImpl personDao = (PersonDaoImpl) interceptor.createProxy();
personDao.savePerson();
}
}
CglibProoxy和JDKproxy的区别:
* jdkProxy和cglib的区别:
* cglibproxy生成的是代理类是目标类的子类
* jdkproxy 是代理类和目标类实现了共同的接口
标签:
原文地址:http://www.cnblogs.com/thinkpad/p/4937399.html