Java动态代理
目录结构
MyService.java
public interface MyService {
public void doSomething();
public void doAddPrint(int a,int b);
}
MyServiceImpl.java
public class MyServiceImpl implements MyService {
@Override
public void doSomething() {
System.out.println("普通实现类");
}
@Override
public void doAddPrint(int a, int b) {
System.out.println((a+b));
}
}
静态代理
HandProxy.java
public class HandProxy implements MyService{
MyServiceImpl myServiceImpl = new MyServiceImpl();
@Override
public void doSomething() {
System.out.println("我是静态代理类");
myServiceImpl.doSomething();
}
@Override
public void doAddPrint(int a, int b) {
}
}
动态代理
AutoProxy.java
public class AutoProxy implements InvocationHandler {
private Object tar;//被动态代理的对象
public Object bind(Object tar){
this.tar = tar;
return Proxy.newProxyInstance(tar.getClass().getClassLoader(),tar.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object res = null;
System.out.println("auto proxy start");
res = method.invoke(tar,args);
System.out.println("auto proxy end");
return res;
}
}
public class ProxyDemo {
public static void main(String[] args) {
/*HandProxy handProxy = new HandProxy();
handProxy.doSomething();*/
AutoProxy autoProxy = new AutoProxy();
MyServiceImpl myServiceImpl = new MyServiceImpl();
MyService proxy = (MyService)autoProxy.bind(myServiceImpl);
proxy.doAddPrint(1,2);
}
}