一:基于接口的静态代理
1.分层
User(使用者)——Proxy(代理对象)——Target(目标对象)
二.上代码
1.基于接口的代理
◆接口InterfaceObject.java
package com.tiglle.aop.interfaces.proxy;
//基于接口代理的接口(目标对象和代理对象都要实现)
public interface InterfaceObject {
//目标对象和代理对象都要实现的方法
public void common();
public void common2();
}
◆目标对象TargetObject.java
package com.tiglle.aop.interfaces.proxy;
//目标对象
public class TargetObject implements InterfaceObject{
//处理真正的逻辑,不对外暴露此方法
@Override
public void common() {
System.out.println("目标对象的执行");
}
@Override
public void common2() {
System.out.println("目标对象的执行");
}
}
◆代理对象ProxyObject.java
package com.tiglle.aop.interfaces.proxy;
//代理对象
public class ProxyObject implements InterfaceObject{
//代理对象中包含目标对象
private TargetObject targetObject;
//给目标对象赋值
public ProxyObject(TargetObject targetObject){
this.targetObject = targetObject;
}
//代理对象调用目标对象的方法,自己额外做些处理
@Override
public void common() {
System.out.println("代理对象开始执行:before");
targetObject.common();
System.out.println("代理对象结束执行:after");
}
@Override
public void common2() {
System.out.println("代理对象开始执行:before");
targetObject.common2();
System.out.println("代理对象结束执行:after");
}
}
◆测试执行main方法
package com.tiglle.aop.interfaces.proxy;
public class UseExec {
//调用(调用代理对象)
public static void main(String[] args) {
//向上转型
InterfaceObject interfaces = /*代理类*/new ProxyObject(new TargetObject()/*目标类*/);
//通过接口调用代理方法(目标方法)
interfaces.common();
interfaces.common2();
}
}
结果:
代理对象开始执行:before
目标对象的执行
代理对象结束执行:after
代理对象开始执行:before
目标对象的执行
代理对象结束执行:after