System.out.println("---------------------目标方法之前执行");
}
public void afterMethod(){
System.out.println("---------------------目标方法之后执行");
}
}
[java]
package www.csdn.spring.jdk.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* JDK动态代理
* @author redarmy
*/
public class JDKProxy implements InvocationHandler {
// 代理目标对象
private Object target;
// 创建目标对象的的代理对象
public Object createProxyInstance(Object target) {
this.target = target;// 代理的目标对象
// 创建代理对象
// 1、定义代理类的类加载器
// 2、代理类要实现的接口列表
// 3、 指派方法调用的调用处理程序
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
/**
* proxy:目标对象的代理实例method:对于代理实例调用接口方法的Method实例args:方法参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// 声明返回值
Object returnValue = null;
beforeMethod();
// 执行目标方法
returnValue = method.invoke(target, args);
afterMethod();
// 修改返回值
return returnValue;
}
public void beforeMethod(){
System.out.println("---------------------目标方法之前执行");
}
public void afterMethod(){
System.out.println("---------------------目标方法之后执行");
}
}
package www.csdn.spring.jdk.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* JDK动态代理
* @author redarmy
*/
public class JDKProxy implements InvocationHandler {
// 代理目标对象
private Object target;
// 创建目标对象的的代理对象
public Object createProxyInstance(Object target) {
this.target = target;// 代理的目标对象
// 创建代理对象
// 1、定义代理类的类加载器
// 2、代理类要实现的接口列表
// 3、 指派方法调用的调用处理程序
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
/**
* proxy:目标对象的代理实例method:对于代理实例调用接口方法的Method实例args:方法参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// 声明返回值
Object returnValue = null;
beforeMethod();
// 执行目标方法
returnValue = method.invoke(target, args);
afterMethod();
// 修改返回值
return returnValue;
}
public void beforeMethod(){
System.out.println("---------------------目标方法之前执行");
}
public void afterMethod(){
System.out.println("---------------------目标方法之后执行");
}
}5、测试说明
[java]
package www.csdn.spring.jdk.proxy;import org.junit.Test;
public class TestSay {
@Test
public void say(){
//真实主题角色
SayGoodByeImpl sayGoodByeImpl = new SayGoodByeImpl();//代理角色
JDKProxy jdkProxy = new JDKProxy();
SayGoodBye sayProxy = (SayGoodBye) jdkProxy.createProxyInstance(sayGoodByeImpl);//代理说:
sayProxy.say("你和他分手吧!!!");}
}
[java] view plaincopyprint
- package www.csdn.spring.jdk.proxy;
- import org.junit.Test;
- public class TestSay {
- @Test
- public void say(){
- //真实主题角色
- SayGoodByeImpl sayGoodByeImpl = new SayGoodByeImpl();
- //代理角色
- JDKProxy jdkProxy = new JDKProxy();
- SayGoodBye sayProxy = (SayGoodBye) jdkProxy.createProxyInstance(sayGoodByeImpl);
- //代理说:
- sayProxy.say("你和他分手吧!!!");
- }
- }
package www.csdn.spring.jdk.proxy;
import org.junit.Test;
public class TestSay {
@Test
public void say(){
//真实主题角色
SayGoodByeImpl sayGoodByeImpl = new SayGoodByeImpl();
//代理角色
JDKProxy jdkProxy = new JDKProxy();
SayGoodBye sayProxy = (SayGoodBye) jdkProxy.createProxy