jdk动态代理
package com.test.jdkProxy;
public interface IUsersService {
public void insert();
}
package com.test.jdkProxy;
//目标类
public class UsersService implements IUsersService {
@Override
public void insert() {
System.out.println("添加用户");
}
}
package com.test.jdkProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;
//代理类生成器
public class Handler implements InvocationHandler {
//存放目标对象
Object subject;
public Handler(Object subject)
{
this.subject=subject;
}
//根据传递进来的目标对象 生成一个代理对象 返回
public static Object bind(Object subject)
{
return Proxy.newProxyInstance(Handler.class.getClassLoader(),
subject.getClass().getInterfaces(),
new Handler(subject));
}
//实现代理类中重写接口中的方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//增强对象
System.out.println("执行开始的时间:"+new Date());
//调用目标对象的方法
Object object=method.invoke(subject,args);
System.out.println("执行结束的时间:"+new Date());
return object;
}
}
测试
package com.test.jdkProxy;
import org.junit.Test;
public class TestJdkProxy {
//测试jdk自带动态代理生成
@Test
public void test()
{
IUsersService usersServiceProxy=(IUsersService) Handler.bind(new UsersService());
usersServiceProxy.insert();
}
}