AOP

AOP(面向切面编程)

问题

应用中非业务的通用功能(日志管理、权限管理、事务管理、异常管理等)代码横向散布在多个不同的业务模块中,容易产生大量重复性代码,不利于复用和维护。

解决方案

Spring AOP在运行时为目标对象通过动态代理(JDK或者CGLIB)生成一个动态代理对象,在代理对象中实现对目标对象的增强。

代理技术

描述

JDK动态代理

Spring AOP默认的动态代理方式,如果目标对象实现了接口,那么通过JDK的java.lang.reflect.Proxy类来代理。

CGLIB动态代理

如果目标对象没有实现接口,那么通过CGLIB生成目标对象的子类来代理目标对象。

因为标记为final的方法是无法覆盖的,所以这种方法是无法完成代理的。

JDK动态代理只提供接口的代理,创建的代理对象可以强转为接口类型。

CGLib动态代理通过生成被代理对象的子类重写父类方法来实现,创建的代理对象可以强转为被代理对象类型。

posted on 2023-07-15 16:05  王景迁  阅读(3)  评论(0编辑  收藏  举报

导航