动态代理之JDK
来源:互联网 发布:python字典转化 编辑:程序博客网 时间:2024/05/16 02:01
代理技术有俩种实现方式::
* JDK的动态代理 :针对实现了接口的类产生代理.
* Cglib的动态代理 :针对没有实现接口的类产生代理.产生了这个类的一个子类对象.不要使用final修改这个类.
这篇文章说一下JDK方式的动态代理,用到了装饰者模式。
直接上例子:
一个接口:
public interface PersonDao {void add();void delete();void modify();void find();}一个实现类
public class PersonDaoImpl implements PersonDao {@Overridepublic void add() {System.out.println("执行了增加方法。。。");}@Overridepublic void delete() {System.out.println("执行了删除方法。。。");}@Overridepublic void modify() {System.out.println("执行了修改方法。。。");}@Overridepublic void find() {System.out.println("执行了查询方法。。。");}}
一个JDK动态代理类
public class PersonJDKProxy implements InvocationHandler {private PersonDao personDao;public PersonJDKProxy(PersonDao personDao){this.personDao = personDao;}/** * 创建PersonDao的代理 */public PersonDao createProxy(){PersonDao newProxyInstance = (PersonDao)Proxy.newProxyInstance(personDao.getClass().getClassLoader(), personDao.getClass().getInterfaces(), this);return newProxyInstance;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//判断方法if("modify".equals(method.getName())){System.out.println("使用JDK代理的方式增强了修改方法");return method.invoke(personDao, args);}return method.invoke(personDao, args);}}一个测试类
@Testpublic void demo1(){PersonDao personDao = new PersonDaoImpl();PersonDao proxy = new PersonJDKProxy(personDao).createProxy();proxy.add();proxy.delete();proxy.modify();proxy.find();}出结果:有图有真相:
阅读全文
0 0
- 动态代理之JDK
- 动态代理之JDK动态代理
- 动态代理模式之JDk动态代理
- Java动态代理之JDK动态代理
- Java动态代理之JDK
- java之jdk动态代理
- Java代理之JDK动态代理
- 代理模式之JDK动态代理
- 代理模式之jdk动态代理
- 代理模式之jdk动态代理
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java代理之(jdk静态代理/jdk动态代理/cglib动态代理/aop/aspectj)
- 动态代理之JDK代理与CGlib代理
- Log4j2 简明教程
- 计算机网络各层协议
- 操作系统Unix、Windows、Mac OS、Linux的故事
- [LeetCode] House Robber 求数组中元素两两不相邻的子序列最大和
- 8.Hibernate总结以及在面试中的一些问题.
- 动态代理之JDK
- java敏感词过滤
- 简单学生选课系统之课程基本信息
- Unity Shader之Stencil Buffer
- ini_set ( )—用来设置php.ini的各种配置值
- bam/sam 数据格式的介绍 (一)
- IOS-禁用右滑返回的两种方式
- 文化传媒婚纱摄影类网站织梦模板免费下载
- CSS工作原理及选择符