面试之SpringAOP的理解:

AOP(面向切面编程)指的是那些业务本身无关,但是被业务模块所共同调用的业务逻辑或责任(日志管理,权限管理等)封装起来,便于减少系统的重复代码,降低系统见的耦合性,有利于未来系统的扩展性。

SpringAOP 是基于动态代理实现的。主要就是有JDK动态代理和CGLIB动态代理。如果要代理的对象实现了某个接口,那么Spring AOP就会使用 JDK动态代理创建对象。对于没有实现接口的对象,就无法使用JDK动态代理,转而使用CGLIB动态代理生成一个被代理对象的子类来 作为 代理。

面试之SpringAOP的理解:_第1张图片

谈谈JDK动态代理和 CGLIB动态代理的区别:

JDK动态代理只提供接口的代理,不支持类的代理,核心 InvocationHandler 接口和 Proxy 类。

InvocationHandler 类调用invoke()方法来调用目标类中的代码,动态的将横切逻辑和 业务逻辑 编制在一起。

CGLIB 必须依赖于 CGLIB 的类库,CGLIB 原理是针对目标类生成一个子类,覆盖其中的所有方法。CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为 final,那么它是无法使用 CGLIB 做动态代理的。

 

你可能感兴趣的:(面试,职场和发展)