Maison >Java >javaDidacticiel >La classe proxy dynamique Java implémente un exemple simple de journal
Posez une question
Comment la classe proxy dynamique Java implémente-t-elle une journalisation simple ? ? ?
Adresse abrégée du livre : http://www.jianshu.com/users/d38a3668be58/latest_articles
Résoudre le problème
Si vous disposez déjà d'une certaine base Java
Si vous savez déjà ce qu'est un proxy dynamique.
1. Supposons que ce qui suit soit la vraie classe affaires et sa classe d'implémentation
[code]package com.hwy.test; /** * Created by Ay on 2016/7/1. */ public interface BusinessClassService { public void doSomeThing(); }
Classe d'implémentation :
[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. classe de journal et classe d'implémentation :
[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); }
Classe d'implémentation :
[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 Voici l'implémentation du gestionnaire de la classe de journal :
[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. . Enfin, la classe de test :
[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(); } }
5. Exécutez la classe MyLoggerTest
[code]进入doSomeThing方法时间为: 1467326179684 do something ...... 退出doSomeThing方法时间为:1467326179685
6. Dites quelques mots :
[code]1)上面类中,类的初始化,基本可以利用spring配置到配置文件中 2)上面只是一个简单的例子而已
Utilisez une image. pour exprimer grossièrement :
Ce qui précède est le contenu d'un exemple simple du journal d'implémentation de la classe proxy dynamique de Java. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (. www.php.cn) !