您的位置:首页 > 编程语言 > Java开发

java的代理模式实例

2016-07-26 09:56 337 查看

接口文件Hello.java

package com.company.staticProxy;

/**
* Created by ken on 2016/7/25.
*/
public interface Hello {
void say(String str);
}

实现文件HelloImpl.java
package com.company.staticProxy;

/**
* Created by ken on 2016/7/25.
*/
public class HelloImpl implements Hello {

public String name = "奥巴马";
public String name2 = "小奥巴马";

@Override
public void say(String str) {
//System.out.println("之前");
System.out.println("hello " + str);
//System.out.println("之后");
}
}

动态代理文件DynamicProxy.java
package com.company.dynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
* Created by ken on 2016/7/25.
*/
public class DynamicProxy implements InvocationHandler {
//  定义代理对象
public Object target;

//  注入代理对象
public DynamicProxy(Object object) {
this.target = object;
}

/**
*
* @param proxy 被代理对象
* @param method 代理对象的方法(核心业务)
* @param args 调用代理方法所需参数
* @return 代理对象
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//before
before();

//核心业务
Object obj = method.invoke(target, args);

//after
after();

return obj;
}

//before
public void before(){
System.out.println("this is before");
}
//after
public void after(){
System.out.println("this is after");
}
}

主文件MainTest.java

package com.company.dynamicProxy;

import com.company.staticProxy.Hello;
import com.company.staticProxy.HelloImpl;

import java.lang.reflect.Proxy;

/**
* Created by ken on 2016/7/25.
*/
public class MainTest {

public static void main(String[] args) {
//被代理对象
HelloImpl hello = new HelloImpl();
//创建动态代理对象
DynamicProxy proxy = new DynamicProxy(hello);
// 获取被代理对象的代理
Hello result = (Hello) Proxy.newProxyInstance(hello.getClass().getClassLoader(),hello.getClass().getInterfaces(),proxy);
result.say("思路网络科技");
}

}







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: