这里我们就简单写一个例子来看一下cglib代理:
首先先导入cglib的jar包,cglib-nodep.jar,大家可以自行去官网下载即可。
首先创建一个接口:PersonDao
public interface PersonDao {
public void savePerson();
}
创建接口的实现类:PersonDaoImpl
public class PersonDaoImpl implements PersonDao{
@Override
public void savePerson() {
// TODO Auto-generated method stub
System.out.println("savePerson...........");
}
}
事务类:
public class Transaction {
public void beginTransaction() {
System.out.println("begin Transaction");
}
public void commit() {
System.out.println("commit...");
}
}
创建拦截器MyInterceptor:
public class MyInterceptor implements MethodInterceptor{
private Object target; //目标类
private Transaction transcation;//事务
public MyInterceptor(Object target, Transaction transcation) {
super();
this.target = target;
this.transcation = transcation;
}
/*产生代理对象*/
public Object createProxy() {
//代码增强类
Enhancer enhancer = new Enhancer();
enhancer.setCallback(this);//参数为拦截器
enhancer.setSuperclass(target.getClass());//生成的代理类的父类是目标类
return enhancer.create();
}
@Override
public Object intercept(Object obj, Method method, Object[] arg2, MethodProxy arg3) throws Throwable {
// TODO Auto-generated method stub
this.transcation.beginTransaction();
Object result = method.invoke(target, arg2);
this.transcation.commit();
return result;
}
测试类:
public class CglibProxyText {
public void textCglib() {
Object target = new PersonDaoImpl();
Transaction transcation = new Transaction();
MyInterceptor interceptor = new MyInterceptor(target, transcation);
PersonDaoImpl personDaoImpl = (PersonDaoImpl) interceptor.createProxy();
personDaoImpl.savePerson();
}
public static void main(String[] args) {
CglibProxyText text = new CglibProxyText();
text.textCglib();
}
}
这里要注意:通过cglib产生的代理对象,代理类是目标类的子类