Cglib动态代理

来源:互联网 发布:数码宝贝网络侦探进化 编辑:程序博客网 时间:2024/06/09 13:43
package cn.itcast.proxy.cglib;//只有实现类,没有接口public class UserDaoImpl {    public void save(){        System.out.println("保存用户");    }}
package cn.itcast.proxy.cglib;import java.lang.reflect.Method;import org.springframework.cglib.proxy.Enhancer;import org.springframework.cglib.proxy.MethodInterceptor;import org.springframework.cglib.proxy.MethodProxy;//使用Cglib实现动态代理,适合目标类没有实现接口,代理类是目标类的子类,生成的代理对象是目标类子类的对象//使用Cglib必须要导入cglib包,Spring中已集成public class UserDaoImplProxyUtils {    public static UserDaoImpl getProxy(){        //Ehancer是Cglib的核心类        Enhancer enhancer = new Enhancer();        //要代理哪个目标类        enhancer.setSuperclass(UserDaoImpl.class);        //设置回调函数,代理对象的方法一执行,就会调用回调函数        enhancer.setCallback(new MethodInterceptor() {            @Override            public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {                if("save".equals(method.getName())){                    System.out.println("开启事务");                }                Object invoke = methodProxy.invokeSuper(obj, args);                if("save".equals(method.getName())){                    System.out.println("关闭事务");                }                return invoke;            }        });        //返回代理对象        UserDaoImpl proxy = (UserDaoImpl) enhancer.create();        return proxy;    }}
package cn.itcast.proxy.cglib;public class UserDaoImplProxyTest {    public static void main(String[] args) {        UserDaoImpl user = new UserDaoImpl();        user.save();        System.out.println("...................");        UserDaoImpl proxy = UserDaoImplProxyUtils.getProxy();        proxy.save();    }}

这里写图片描述

原创粉丝点击