Heim >Java >javaLernprogramm >Die dynamische Java-Proxy-Klasse implementiert ein einfaches Beispiel für ein Protokoll
Stellen Sie eine Frage
Wie implementiert die dynamische Java-Proxy-Klasse die einfache Protokollierung? ? ?
Abgekürzte Buchadresse: http://www.jianshu.com/users/d38a3668be58/latest_articles
Lösen Sie das Problem
Wenn Sie bereits über eine bestimmte Java-Grundlage verfügen
Wenn Sie bereits wissen, was ein dynamischer Proxy ist.
1. Angenommen, das Folgende ist die echte Business-Klasse und ihre Implementierungsklasse
[code]package com.hwy.test; /** * Created by Ay on 2016/7/1. */ public interface BusinessClassService { public void doSomeThing(); }
Implementierungsklasse:
[code]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 Protokollklasse und Implementierungsklasse:
[code]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); }
Implementierungsklasse:
[code]package com.hwy.test; import java.lang.reflect.Method; /** * 日志类实现 * Created by Ay on 2016/6/30. */ public class MyLoggerImpl implements MyLogger { @Override public void saveIntoMethodTime(Method method) { System.out.println("进入" + method.getName() +"方法时间为: " + System.currentTimeMillis()); } @Override public void saveOutMethodTime(Method method) { System.out.println("退出" + method.getName() + "方法时间为:" + System.currentTimeMillis()); } }
3 Das Folgende ist die Handler-Implementierung der Protokollklasse:
[code]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; } @Override public 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 . Zum Schluss die Testklasse:
[code]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(); } }
Führen Sie die MyLoggerTest-Klasse aus
[code]进入doSomeThing方法时间为: 1467326179684 do something ...... 退出doSomeThing方法时间为:1467326179685
6 Um es grob auszudrücken:
[code]1)上面类中,类的初始化,基本可以利用spring配置到配置文件中 2)上面只是一个简单的例子而已
Das Obige ist der Inhalt eines einfachen Beispiels für das Implementierungsprotokoll der dynamischen Proxy-Klasse von Java. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website ( www.php.cn)!