开心一笑

上课呢,同桌撕了一片纸放嘴里了咬了咬,又吐回了手里。
揉了揉,揉成个球状,然后又把这东西给放嘴里,咽下去了。
我问:你干嘛呢?
这二货幽幽地说:这两天有点感冒,捏个药丸吃。

视频教程

大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持……

视频地址:http://edu.csdn.net/lecturer/994

提出问题

Java动态代理类如何实现简单的日志???
简书地址:http://www.jianshu.com/users/d38a3668be58/latest_articles

解决问题

假如你已经有一定的java基础
假如你已经知道什么是动态代理。

1.假如下面是真实的业务类及其实现类

package com.hwy.test;/*** Created by Ay on 2016/7/1.*/
public interface BusinessClassService {public void doSomeThing();
}

实现类:

package com.hwy.test;/*** 业务类* Created by Ay on 2016/7/1.*/
public class BusinessClassServiceImpl implements BusinessClassService{/** 执行某事 **/public void doSomeThing(){System.out.println("do something ......");}
}

2.下面是日志类和实现类:

package com.hwy.test;import java.lang.reflect.Method;/*** 日志类接口* Created by Ay on 2016/6/30.*/
public interface MyLogger {/** 纪录进入方法时间 **/public void saveIntoMethodTime(Method method);/** 纪录退出方法时间**/public void saveOutMethodTime(Method method);
}

实现类:

package com.hwy.test;import java.lang.reflect.Method;/*** 日志类实现* Created by Ay on 2016/6/30.*/
public class MyLoggerImpl implements MyLogger {@Overridepublic void saveIntoMethodTime(Method method) {System.out.println("进入" + method.getName()  +"方法时间为: " + System.currentTimeMillis());}@Overridepublic void saveOutMethodTime(Method method) {System.out.println("退出" + method.getName() + "方法时间为:" + System.currentTimeMillis());}
}

3.下面是日志类的handler实现:

package com.hwy.test;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;/*** Created by Ay on 2016/6/30.*/
public class MyLoggerHandler implements InvocationHandler {/** 原始对象 **/private Object objOriginal;/** 这里很关键 **/private MyLogger myLogger = new MyLoggerImpl();public MyLoggerHandler(Object obj){super();this.objOriginal = obj;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result = null;/** 日志类的方法 **/myLogger.saveIntoMethodTime(method);/** 调用代理类方法 **/result = method.invoke(this.objOriginal ,args);/** 日志类方法**/myLogger.saveOutMethodTime(method);return result;}}

4.最后是测试类:

package com.hwy.test;import java.lang.reflect.Proxy;/*** Created by A on 2016/6/30.*/
public class MyLoggerTest {public static void main(String[] args) {/** 实例化真实项目中业务类 **/BusinessClassService businessClassService = new BusinessClassServiceImpl();/** 日志类的handler **/MyLoggerHandler myLoggerHandler = new MyLoggerHandler(businessClassService);/** 获得代理类对象 **/BusinessClassService businessClass = (BusinessClassService)Proxy.newProxyInstance(businessClassService.getClass().getClassLoader(), businessClassService.getClass().getInterfaces(),myLoggerHandler);/** 执行代理类方法 **/businessClass.doSomeThing();}
}

5.运行MyLoggerTest类

进入doSomeThing方法时间为: 1467326179684
do something ......
退出doSomeThing方法时间为:1467326179685

6.唠叨几句:

1)上面类中,类的初始化,基本可以利用spring配置到配置文件中
2)上面只是一个简单的例子而已

用一张图大致表达下:

读书感悟

来自《老男孩》

  • 笑,全世界都陪你笑;哭,只有你一个人流泪。
  • 回答错了问题并不可怕,可怕的是问错了问题,那就永远得不到正确的答案
  • 只剩下麻木的我没有了当年的热血。
  • 不管是沙还是石头,都会沉下去。

Java之动态代理类实现日志简单实例相关推荐

  1. 【转】浅析动态代理类实现过程

    代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉及到 ...

  2. java CGLIB动态代理

    CGLIB动态代理 一:CGLIB(Code Generation Library)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成.CGLIB通过继承方式实现代理. 二: ...

  3. 初看Mybatis 源码 (二) Java动态代理类

    先抛出一个问题,用过Mybatis的都知道,我们只需要定义一个Dao的接口,在里面写上一些CRUD相关操作,然后配置一下sql映射文件,就可以达到调用接口中的方法,然后执行sql语句的效果,为什么呢? ...

  4. Java动态代理之InvocationHandler最简单的入门教程

    网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章.其实这些概念没有那么复杂.现在咱们通过一个最简单的例子认识什么是InvocationHandl ...

  5. Java动态代理之InvocationHandler最简单的入门教程 1

    网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章.其实这些概念没有那么复杂.现在咱们通过一个最简单的例子认识什么是InvocationHandl ...

  6. Java动态代理类使用

    Java动态代理类使用 Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类: 一.Interface InvocationHandler:该接口中仅定义了一个方法O ...

  7. 设计模式总结——代理模式以及java的动态代理

    定义 给目标对象一个代理对象,并由代理对象控制对目标对象的引用.联想到生活中就像是海外代购 既然是代理,就说明他要做的事情要比你直接去做要做的多,这就联系到了方法的增强,也就联系到了AOP,面向切面. ...

  8. java jdk动态代理学习记录

    转载自: https://www.jianshu.com/p/3616c70cb37b JDK自带的动态代理主要是指,实现了InvocationHandler接口的类,会继承一个invoke方法,通过 ...

  9. 代理模式及Java实现动态代理

    代理模式 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象. 代理模式UML图 在上图中: RealSubject 是原对象 ...

最新文章

  1. 关于Tomcat上请求的编解码问题
  2. POJ 2151 Check the difficulty of problems (概率dp)
  3. gitlab git clone 输入密码_gitlab1:部署gitlab
  4. 《JavaScript机器人编程指南》——1.2 NodeBot是什么,基本词汇还有哪些
  5. Exceptionless服务端本地化部署
  6. java cxf_拥抱模块化Java平台:Java 10上的Apache CXF
  7. 这群程序员疯了!他们想成为IT界最会带货的男人
  8. 信息学奥赛一本通 1057:简单计算器 | OpenJudge NOI 1.4 19
  9. 第二章 变量和基本类型
  10. 3d 自动生成物体_CVPR2020论文介绍: 3D 目标检测高效算法
  11. 在的微型计算机系统中 外设可和,微机原理第七章题库
  12. python_dataframe总结1
  13. echarts文档解读
  14. 通过一个简单例子看懂遗传算法,附MATLAB代码
  15. 充电头PD协议和QC协议的理解
  16. 反向跟单——羊群效应
  17. c 语言的15个晦涩,一条晦涩难懂的C语言语句
  18. 海洋cms单本小说网站模板
  19. 仅改变rowspan背景_山西耗资10亿的小镇,人称长治“小周庄”,距市中心仅16公里...
  20. Android 分享功能的实现

热门文章

  1. The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on .
  2. 深度学习去燥学习编码_您不应该学习编码的5个理由
  3. C++弹幕游戏自制分享
  4. JavaWeb基础(黑马配套)
  5. 智慧教室—基于人脸表情识别的考试防作弊系统
  6. 对一个公益项目的探究(r8笔记第65天)
  7. 史记翻译-汉初三杰-韩信-淮阴侯列传第三十二
  8. 敏捷开发绩效管理之四:为团队设立外部绩效目标(目标管理,外向型绩效)
  9. 支付宝和微信支付合作伙伴RiverPay加速全球化战略布局
  10. 坐标变换、主成分分析、贝叶斯决策、参数估计