JAVA动态代理实现的小例子
2010-08-24 14:41
429 查看
要代理的接口类
package com.yzy.test.dynaproxy;
public interface IHelloWorldInterface {
public void sayHello(); //测试代理的方法
}
要代理的接口类的实现
package com.yzy.test.dynaproxy.impl;
import com.yzy.test.dynaproxy.IHelloWorldInterface;
public class HelloWorldImpl implements IHelloWorldInterface {
public void sayHello() { //实现测试代理的方法
System.out.println("this is business logic in service");
}
}
真正的代理类
package com.yzy.test.dynaproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class HelloHandler implements InvocationHandler {
private Object delegate;
public HelloHandler(Object delegate) {
this.delegate = delegate;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result;
doThisMethodBefore(); //方法执行前的操作
result = method.invoke(this.delegate, args); //执行被代理的方法
doThisMethodAfter(); //方法执行后的操作
return null;
}
private void doThisMethodAfter() {
System.out.println("before method invoke!");
}
private void doThisMethodBefore() {
System.out.println("after method invoke!");
}
}
测试
package com.yzy.test.dynaproxy.facade;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import com.yzy.test.dynaproxy.HelloHandler;
import com.yzy.test.dynaproxy.IHelloWorldInterface;
import com.yzy.test.dynaproxy.impl.HelloWorldImpl;
/**
* @author: Yangzy 2010 2010-8-24 下午02:12:20
* description: text dynamicProxy
*/
public class TestDynaProxy {
public static void main(String[] args) {
IHelloWorldInterface helloWorld = new HelloWorldImpl(); //创建一个被代理的类的对象
InvocationHandler ihHW = new HelloHandler(helloWorld); 创建一个代理类的对象
IHelloWorldInterface hwProxy = (IHelloWorldInterface)Proxy.newProxyInstance( //这里动态实现被代理的对象的控制
helloWorld.getClass().getClassLoader(),
helloWorld.getClass().getInterfaces(),
ihHW
);
hwProxy.sayHello(); //运行被代理的方法
}
}
package com.yzy.test.dynaproxy;
public interface IHelloWorldInterface {
public void sayHello(); //测试代理的方法
}
要代理的接口类的实现
package com.yzy.test.dynaproxy.impl;
import com.yzy.test.dynaproxy.IHelloWorldInterface;
public class HelloWorldImpl implements IHelloWorldInterface {
public void sayHello() { //实现测试代理的方法
System.out.println("this is business logic in service");
}
}
真正的代理类
package com.yzy.test.dynaproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class HelloHandler implements InvocationHandler {
private Object delegate;
public HelloHandler(Object delegate) {
this.delegate = delegate;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result;
doThisMethodBefore(); //方法执行前的操作
result = method.invoke(this.delegate, args); //执行被代理的方法
doThisMethodAfter(); //方法执行后的操作
return null;
}
private void doThisMethodAfter() {
System.out.println("before method invoke!");
}
private void doThisMethodBefore() {
System.out.println("after method invoke!");
}
}
测试
package com.yzy.test.dynaproxy.facade;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import com.yzy.test.dynaproxy.HelloHandler;
import com.yzy.test.dynaproxy.IHelloWorldInterface;
import com.yzy.test.dynaproxy.impl.HelloWorldImpl;
/**
* @author: Yangzy 2010 2010-8-24 下午02:12:20
* description: text dynamicProxy
*/
public class TestDynaProxy {
public static void main(String[] args) {
IHelloWorldInterface helloWorld = new HelloWorldImpl(); //创建一个被代理的类的对象
InvocationHandler ihHW = new HelloHandler(helloWorld); 创建一个代理类的对象
IHelloWorldInterface hwProxy = (IHelloWorldInterface)Proxy.newProxyInstance( //这里动态实现被代理的对象的控制
helloWorld.getClass().getClassLoader(),
helloWorld.getClass().getInterfaces(),
ihHW
);
hwProxy.sayHello(); //运行被代理的方法
}
}
相关文章推荐
- JAVA动态代理实现aop的简单例子
- 动态代理的java实现
- Java动态代理的实现机制
- Java动态代理三——模拟AOP实现
- Java JDK 动态代理使用及实现原理分析
- java动态代理实现AOP
- Java动态代理的实现详解
- Java动态代理实现AOP
- 详解Java动态代理的实现机制
- Java 动态代理实现
- JAVA动态代理 和 Spring AOP 4种通知的简单实现
- java中动态代理的实现
- java动态代理例子(Proxy,InvocationHandler)
- java动态代理实现
- Java 实现动态代理实现AOP
- Java中三种代理方式—— 静态代理与两种动态代理的实现机制
- 模拟JDK动态代理 ; 自己动手模拟实现java动态代理
- 详解java动态代理的2种实现方式
- 轻松实现java动态代理
- Java动态代理的实现原理