1:基本接口的实现
package com.hxkj.test;
public interface IUserService {
public void start();
public void playing();
public void end();
}
package com.hxkj.test;
public class UserService implements IUserService {
@Override
public void start() {
System.out.println("开始执行啦---");
}
@Override
public void playing() {
// TODO Auto-generated method stub
System.out.println("正在执行啦---");
}
@Override
public void end() {
// TODO Auto-generated method stub
System.out.println("执行完毕啦---");
}
}
2:代理类的实现
package com.hxkj.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyInvocationHandler implements InvocationHandler {
// 目标对象
private Object target;
/**
* 构造方法
* @param target 目标对象
*/
public MyInvocationHandler(Object target) {
super();
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 在目标对象的方法执行之前简单的打印一下
System.out.println("------------------before------------------");
// 执行目标对象的方法
Object result = method.invoke(target, args);
// 在目标对象的方法执行之后简单的打印一下
System.out.println("-------------------after------------------");
return result;
}
/**
* 获取目标对象的代理对象
* @return 代理对象
*/
public Object getProxy() {
return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
target.getClass().getInterfaces(), this);
}
}
3:实现测试
package com.hxkj.test;
public class TestInvocation {
public static void main(String[] args) {
IUserService iUserService = new UserService();
// 实例化InvocationHandler
MyInvocationHandler invocationHandler = new MyInvocationHandler(iUserService);
// 根据目标对象生成代理对象
IUserService proxy = (IUserService) invocationHandler.getProxy();
// 调用代理对象的方法
proxy.start();
proxy.playing();
proxy.end();
}
}
4:测试结果
5:对于代理类的详细的参数详解