cglib动态代理(需要cglib.jar)

1.原理
cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理
API介绍:
    Enhancer enhancer = new Enhancer(); // cglib增强类
    enhancer.setSuperclass(target.getClass());  // 设置目标类
    enhancer.setCallback(this); // 设置委托对象
    return (T) enhancer.create();   // 创建代理对象
    
    MethodInterceptor 方法拦截接口
2.具体实现
2.1 User.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    private String username;
    private String password;
}
2.2 委托类
public class UserDaoImpl implements IUserDao {
    @Override
    public void saveUser(User user) {
        System.out.println("UserDaoImpl save user.");
    }

    @Override
    public int updateUser(User user) {
        System.out.println("UserDaoImpl update user.");
        return 0;
    }
}
2.3 代理类
public class UserCglibProxy<T> implements MethodInterceptor {

    private T target;

    public T proxy(T target) {
        this.target = target;
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(target.getClass());
        enhancer.setCallback(this);
        return (T) enhancer.create();
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("ProxyMethod before.");
        Object result = methodProxy.invoke(target, objects);
        System.out.println("ProxyMethod after.");
        return result;
    }
}
3.测试
@Test
public void testCglib() {
    User user = new User();
    UserDaoImpl userDao = new UserDaoImpl();
    UserDaoImpl userDaoProxy = new UserCglibProxy<UserDaoImpl>().proxy(userDao);
    userDaoProxy.saveUser(user);
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,544评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,645评论 18 399
  • 看你的个签 就像读了一个故事
    北七海阅读 173评论 0 0
  • 我很认真的学着那天你陪我一起买的陶笛,房间里断断续续传出了简单的音符,我没有音乐天赋,也不爱唱歌,却唯独对这个陶笛...
    两只玻璃鞋阅读 179评论 0 0
  • 最近真的非常闲,刚刚第二次创业两次失败,但都创的不干脆,败的不彻底,在这段无聊的日子里竟然学起了八年前想学的一问语...
    驴儿飞阅读 409评论 0 1

友情链接更多精彩内容