接口
package proxyTest;
public interface Service {
void add();
void delete();
void update();
void select();
}
接口实现类
package proxyTest;
public class ServiceImpl implements Service{
@Override
public void add() {
System.out.println("执行了添加操作");
}
@Override
public void delete() {
System.out.println("执行了删除操作");
}
@Override
public void update() {
System.out.println("执行了更新操作");
}
@Override
public void select() {
System.out.println("执行了查询操作");
}
}
代理类
package proxyTest;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyProxy implements InvocationHandler {
Object target;
public void setTarget(Object target){
this.target=target;
}
public Object getProxy(){
return Proxy.newProxyInstance(getClass().getClassLoader(),
target.getClass().getInterfaces(),
this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName()+"方法的前置增强");
method.invoke(target,args);
System.out.println(method.getName()+"方法的后置增强");
return null;
}
}
测试
public class Main {
public static void main(String[] args) {
ServiceImpl service=new ServiceImpl();
MyProxy myproxy=new MyProxy();
myproxy.setTarget(service);
Service proxy= (Service) myproxy.getProxy();
proxy.add();
System.out.println("==========================我是分割线===================================");
proxy.delete();
System.out.println("==========================我是分割线===================================");
proxy.update();
System.out.println("==========================我是分割线===================================");
proxy.select();
}
}
结果
add方法的前置增强
执行了添加操作
add方法的后置增强
==========================我是分割线===================================
delete方法的前置增强
执行了删除操作
delete方法的后置增强
==========================我是分割线===================================
update方法的前置增强
执行了更新操作
update方法的后置增强
==========================我是分割线===================================
select方法的前置增强
执行了查询操作
select方法的后置增强
Process finished with exit code 0