当前位置:天才代写 > tutorial > JAVA 教程 > JDK动态署理简介

JDK动态署理简介

2017-11-02 08:00 星期四 所属: JAVA 教程 浏览:613

动态署理

署理模式是 Java 中的常用设计模式,署理类通过挪用被署理类的相关要领,提供预处理惩罚、过滤、过后处理惩罚等处事,动态署理及通过反射机制动态实现署理机制。JDK 中的 java.lang.reflect.Proxy 类可以用来实现动态署理。

首先,筹备一个简朴的接口和实现类

/**
 * 接口 IHello.java
 */
public interface IHello {
    void hello();
}
/**
 * 实现类 Hello.java
 */
public class Hello implements IHello {
    @Override
    public void hello() {
        System.out.println("我是Hello.");
    }
}

通过 Proxy 实现动态署理

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
    
import org.junit.Test;
    
public class HelloTest {
    @Test
    public void testProxy() throws Exception {
        final IHello hello = new Hello();
    
        /*
         * proxyHello    : 署理主题脚色,署理类的实例 
         * IHello        : 抽象主题脚色,署理类和被署理类都需要实现的接口,JDK中的动态署理必需针对接口
         * hello         : 真实主题脚色,被署理类的实例
         */
        IHello proxyHello = (IHello) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
                new Class[] { IHello.class }, new InvocationHandler() {
    
                    /*
                     * proxy : 当前署理类的一个实例; 若挪用proxy的非final要领,将造成无限轮回挪用
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    
                        // 前期的业务逻辑操纵
                        System.out.println("---开始");
    
                        // 挪用被署理类的要领,传入参数args,获得返回
                        Object object = method.invoke(hello, args);
    
                        // 后期的业务逻辑操纵
                        System.out.println("---竣事");
    
                        return object;
                    }
                });
    
        proxyHello.hello();
    }
}

JDK动态代理简介

 

    关键字:

天才代写-代写联系方式