动态代理Demo

动态代理

一般有三种代理方式,静态代理,jdk自带的动态代理和cglib动态代理。在我的git上有具体demo的源码,这里整合cglib的使用和相关的工具类

cglib动态代理实例

用来代理和封装真实主题的类,他实现了net.sf.cglib.proxy.MethodInterceptor的接口,可以用来添加代理的逻辑,这里用来日志代理。

public class LogInterceptor implements MethodInterceptor {

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println(String.format("log start time [%s] ", new Date()));
        Object result = methodProxy.invokeSuper(o, objects);
        System.out.println(String.format("log end time [%s] ", new Date()));
        return result;
    }
}

真实主题角色接口和实现类

public interface UserService {

    void insert(Object user);

    void update(Object user);

    Object list();
}
public class UserServiceImpl implements UserService {

    @Override
    public void insert(Object user) {
        System.out.println("这里是添加用户实现");
    }

    @Override
    public void update(Object user) {
        System.out.println("这里是添加用户实现");
    }

    @Override
    public Object list() {
        System.out.println("这里是用户列表实现");
        return new Object();
    }
}

创建代理类的通用工具类

public class CglibProxyUtil {

    /**
     * 定义代理的生成方法,用于创建代理对象
     *
     * @param interceptor 代理补充的逻辑
     * @param targetClass 需要代理的类
     * @param <T>         需要代理的类的类型
     * @return 代理类
     */
    public static <T> T createProxyObject(MethodInterceptor interceptor, Class<T> targetClass) {
        Enhancer enhancer = new Enhancer();
        // 为代理对象设置父类,即指定目标类
        enhancer.setSuperclass(targetClass);
        enhancer.setCallback(interceptor);
        return (T) enhancer.create();
    }

}

main方法测试

public static void main(String[] args) {
    LogInterceptor logInterceptor = new LogInterceptor();
    UserServiceImpl service = CglibProxyUtil.createProxyObject(logInterceptor, UserServiceImpl.class);
    service.update(new Object());
    service.insert(new Object());
    service.list();
}
/*output:
log start time [Wed Jul 06 16:20:10 CST 2022] 
这里是添加用户实现
log end time [Wed Jul 06 16:20:10 CST 2022] 
log start time [Wed Jul 06 16:20:10 CST 2022] 
这里是添加用户实现
log end time [Wed Jul 06 16:20:10 CST 2022] 
log start time [Wed Jul 06 16:20:10 CST 2022] 
这里是用户列表实现
log end time [Wed Jul 06 16:20:10 CST 2022] 
*/

相关链接

动态代理详解:https://juejin.cn/post/6844903744954433544
我的动态代理demo:https://gitee.com/hei_xiaoshuai/proxy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值