AOP(面向切面编程)
问题
应用中非业务的通用功能(日志管理、权限管理、事务管理、异常管理等)代码横向散布在多个不同的业务模块中,容易产生大量重复性代码,不利于复用和维护。
解决方案
Spring AOP在运行时为目标对象通过动态代理(JDK或者CGLIB)生成一个动态代理对象,在代理对象中实现对目标对象的增强。
代理技术 |
描述 |
JDK动态代理 |
Spring AOP默认的动态代理方式,如果目标对象实现了接口,那么通过JDK的java.lang.reflect.Proxy类来代理。 |
CGLIB动态代理 |
如果目标对象没有实现接口,那么通过CGLIB生成目标对象的子类来代理目标对象。 |
因为标记为final的方法是无法覆盖的,所以这种方法是无法完成代理的。
JDK动态代理只提供接口的代理,创建的代理对象可以强转为接口类型。
CGLib动态代理通过生成被代理对象的子类重写父类方法来实现,创建的代理对象可以强转为被代理对象类型。
标签:JDK,对象,代理,CGLIB,AOP,动态 From: https://www.cnblogs.com/WJQ2017/p/17556286.html