目前接触过的动态代理
动态代理的实现依赖反射机制
-
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)
文章介绍了动态代理的概念,通过MyBatis课程中的静态代理、JDK动态代理和CGLIB子类代理进行讲解。示例中展示了如何使用ProxyFactory创建动态代理对象,实现代理功能,如在方法调用前后添加额外操作。此外,还提到了SpringAOP在事务管理和异常处理中的应用,如环绕通知。
458

被折叠的 条评论
为什么被折叠?



