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

黄舟
黄舟Original
2017-01-19 11:27:151466Durchsuche

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

Stellungnahme:
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