JDK的动态代理依靠接口实现,如果有些类并没有实现接口,则不能使用JDK代理,这就要使用cglib动态代理了。

Cglib动态代理 
JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。

BookCadeImpl1.java

Java代码  
  1. package net.battier.dao.impl;
  2. /**
  3. * 这个是没有实现接口的实现类
  4. *
  5. * @author student
  6. *
  7. */
  8. public class BookFacadeImpl1 {
  9. public void addBook() {
  10. System.out.println("增加图书的普通方法...");
  11. }
  12. }

3、BookFacadeProxy.java

Java代码  
  1. package net.battier.proxy;
  2. import java.lang.reflect.Method;
  3. import net.sf.cglib.proxy.Enhancer;
  4. import net.sf.cglib.proxy.MethodInterceptor;
  5. import net.sf.cglib.proxy.MethodProxy;
  6. /**
  7. * 使用cglib动态代理
  8. *
  9. * @author student
  10. *
  11. */
  12. public class BookFacadeCglib implements MethodInterceptor {
  13. private Object target;
  14. /**
  15. * 创建代理对象
  16. *
  17. * @param target
  18. * @return
  19. */
  20. public Object getInstance(Object target) {
  21. this.target = target;
  22. Enhancer enhancer = new Enhancer();
  23. enhancer.setSuperclass(this.target.getClass());
  24. // 回调方法
  25. enhancer.setCallback(this);
  26. // 创建代理对象
  27. return enhancer.create();
  28. }
  29. @Override
  30. // 回调方法
  31. public Object intercept(Object obj, Method method, Object[] args,
  32. MethodProxy proxy) throws Throwable {
  33. System.out.println("事物开始");
  34. proxy.invokeSuper(obj, args);
  35. System.out.println("事物结束");
  36. return null;
  37. }
  38. }

4、TestCglib.java

Java代码  
  1. package net.battier.test;
  2. import net.battier.dao.impl.BookFacadeImpl1;
  3. import net.battier.proxy.BookFacadeCglib;
  4. public class TestCglib {
  5. public static void main(String[] args) {
  6. BookFacadeCglib cglib=new BookFacadeCglib();
  7. BookFacadeImpl1 bookCglib=(BookFacadeImpl1)cglib.getInstance(new BookFacadeImpl1());
  8. bookCglib.addBook();
  9. }
  10. }

转载于:https://www.cnblogs.com/guoliangxie/p/5301782.html

4-2cglib 动态代理相关推荐

  1. 【spring】动态代理

    代理 动态代理 特点:字节码随用随创建,随用随加载 作用:不修改源码的基础上对方法增强 分类:基于接口的动态代理.基于子类的动态代理 基于接口的动态代理: 涉及的类:Proxy     提供者:JDK ...

  2. (转)面试必备技能:JDK动态代理给Spring事务埋下的坑!

    一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A ...

  3. Java动态代理和静态代理区别

    静态代理 package staticproxy;/*** 接口* @author newtouch**/ public interface IHello {public void sayHello( ...

  4. java动态代理【一】

    java动态代理的定义:为其他目标类的方法增加切面的逻辑,即在执行目标类方法的时候,先去执行一段如校验检测的逻辑代码.java通俗一点就是生成一个继承目标类的子类,并在每个调用方法都添加一段逻辑. 应 ...

  5. 支撑Java框架的基础技术:泛型,反射,动态代理,cglib

    以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...

  6. 支撑Spring的基础技术:泛型,反射,动态代理,cglib等

    1.静态代码块和非静态代码块以及构造函数 出自尚学堂视频:<JVM核心机制 类加载全过程 JVM内存分析 反射机制核心原理 常量池理解> public class Parent {stat ...

  7. 【spring】初识aop(面向切面编程) 使用jdk动态代理

    BankServiceIImple.java 代码实现: package com.zzxtit.aop;import java.math.BigDecimal;public interface Ban ...

  8. java静态代理与动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 代理模式是java常见的设计模式.其目的是为其他对象提供一个代理以控制对某个真实对象的访问.通过代理类这一中间层,有效控制对真 ...

  9. Java动态代理机制

    在Java的动态代理机制中,有两个重要的类.一个是InvocationHandler,另一个是Proxy. InvocationHandler:每一个动态代理类都必须要实现InvocationHand ...

  10. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

最新文章

  1. ArduinoYun教程之Arduino环境与Linux环境的桥梁Bridge
  2. 用SC命令 添加或删除windows服务提示OpenSCManager 失败5
  3. 复制不用说yes的方法
  4. java反射的编译过程_Java反射机制小结和实际操作
  5. 计算机网络技术发源于什么,计算机网络基础试题和答案
  6. 剑指offer之打印链表的倒数第N个节点的值
  7. 【CTF WEB】反序列化
  8. mybatis调用oracle存储过程例子.
  9. Struts12---文件的下载
  10. AMP (LAMP/WAMP)
  11. 局域网网络相关的问题
  12. Hyperledger Fabric 实战(八):couchdb 丰富查询 selector 语法
  13. 动态引入js文件和css样式表文件
  14. C语言练习-绘制金字塔
  15. linux恢复树莓派内存卡容量,找回树莓派SD卡剩余空间
  16. 利用python爬取飞猪信息_手把手教你使用Python爬取西刺代理数据(上篇)-阿里云开发者社区...
  17. 西子凌波回复集5(网友整理版)
  18. ArcGIS 在线地图加载插件介绍
  19. C语言控制51单片机音乐报告,51单片机_音乐_天空之城_C语言
  20. Cisco思科路由器配置GRE通道的简单例子

热门文章

  1. 拼多多2018校招内推编程-大整数相乘
  2. HTTPRunner学习笔记
  3. 真香 自从用了Charles,Fiddler已经被我彻底卸载了
  4. linux rec命令_文件过多时ls命令为什么会卡住?
  5. python办公入门经典_Python3入门经典100例
  6. anaconda如何做python笔记_python笔记
  7. opencv表面缺陷检测_机器视觉表面缺陷检测 光学元件瑕疵检测
  8. 云服务器学习linux_云服务器怎么选linux系统
  9. php 查询cpu使用率,php获取CPU使用情况的代码
  10. Pytorch基础(一) 初始tensor