Heim > Java > javaLernprogramm > Die dynamische Java-Proxy-Klasse implementiert ein einfaches Beispiel für ein Protokoll

Die dynamische Java-Proxy-Klasse implementiert ein einfaches Beispiel für ein Protokoll

黄舟
Freigeben: 2017-01-19 11:27:15
Original
1464 Leute haben es durchsucht

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();
}
Nach dem Login kopieren


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 ......");
    }
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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());

    }
}
Nach dem Login kopieren

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;
    }

}
Nach dem Login kopieren

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();

    }
}
Nach dem Login kopieren

Führen Sie die MyLoggerTest-Klasse aus

[code]进入doSomeThing方法时间为: 1467326179684
do something ......
退出doSomeThing方法时间为:1467326179685
Nach dem Login kopieren

6 Um es grob auszudrücken:

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

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)! Die dynamische Java-Proxy-Klasse implementiert ein einfaches Beispiel für ein Protokoll

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage