目前接触过的动态代理
动态代理的实现依赖反射机制
-
mybatis课程中学的静态代理、jdk动态代理、cglib子类代理;

SuperLiu(目标对象)实现了Service(业务接口)

通过反射机制获取被代理对象
/**
* 工厂类
*/
public class ProxyFactory {
//成员变量设计为接口
Service target;
//传入目标对象
public ProxyFactory(Service target) {
this.target = target;
}
//返回动态代理对象
public Object getAgent(){
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
//它就类似于Agent的功能,代理的功能和目标对象的业务功能调用在这
//实现:匿名内部类
new InvocationHandler() {
/* @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
}*/
@Override
public Object invoke(
//创建代理对象
Object proxy,
//method就是目标方法 sing(),show() 反射机制
Method method,
//目标方法的参数
Object[] args)
throws Throwable {
//代理功能
System.out.println("预定时间");
System.out.println("预定场地");
//主业务功能***
// target.sing();写死了
Object obj = method.invoke(target, args);
//代理功能
System.out.println("结算费用");
return obj;//obj是目标方法的返回值
}
}
) ; //return结束
/* 三个参数
ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h
*/
}
}
2、spring Aop 例如aspectj的环绕通知、事务
3、 springboot中的统一异常处理(也属于spring aop
@ExceptionHandler(SQLIntegrityConstraintViolationException.class)