Spring-Aop学习的前提——cglib代理

这里我们就简单写一个例子来看一下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产生的代理对象,代理类是目标类的子类

猜你喜欢

转载自blog.csdn.net/qq_39411208/article/details/81585821