需要代理的接口:
package com.madg.jdkProxy;
public interface IUserService
{
void addUser(String strUser);
void editUser();
}
接口实现类:
package com.madg.jdkProxy;
public class UserService implements IUserService
{
@Override
public void addUser(String strUser)
{
System.out.println("增加一个用户:"+strUser);
}
@Override
public void editUser()
{
System.out.println("编辑一个用户");
}
}
实现的动态代理类:
package com.madg.jdkProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Objects;
public class ServiceInvocationHandler implements InvocationHandler
{
private Object target;
public ServiceInvocationHandler(Object target)
{
this.target = target;
}
/**
* 执行目标对象的方法,并进行增强
* @param proxy
* @param method
* @param args
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
Object result=null;
System.out.println("代理类方式,进行了增强。。。");
System.out.println("事务开始。。。");
//执行目标方法对象
result=method.invoke(target,args);
System.out.println("事务结束。");
return result;
}
}
真实的代理对象类(获取真是的代理实例):
package com.madg.jdkProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Objects;
public class ProxyClass
{
Object target;
InvocationHandler invocationHandler;
public ProxyClass(Object target, InvocationHandler invocationHandler)
{
this.target = target;
this.invocationHandler = invocationHandler;
}
/**
* 创建代理实例
*/
public Object getProxy()
{
return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),this.target.getClass().getInterfaces(),invocationHandler);
}
}
测试类:
package com.madg.jdkProxy;
public class Test
{
public static void main(String args[])
{
IUserService userService=new UserService();
ServiceInvocationHandler handler=new ServiceInvocationHandler(userService);
//根据目标生成代理对象
ProxyClass proxyClass=new ProxyClass(userService,handler);
IUserService proxyed= (IUserService) proxyClass.getProxy();
proxyed.addUser("MADG");
}
}