1,什么是aop?
AOP 为 Aspect Oriented Programming 的缩写,翻译为面向切面编程,利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。通俗理解就是在不修改源代码的情况下,在主干功能里面添加新的功能。
2,aop里面的专业术语
(1)aspect:切面 一种标准代码/功能,分散在应用程序的多个位置,通常与实际的业务逻辑(例如,事务管理)不同。每个方面都专注于特定的跨领域功能。 由pointcut和advice组成
(2)advice:建议切面在何时以及如何进行增强处理
(3)JoinPoint:连接点就是一个方法
(4)PointCut:一切连接点的集合
(5)Target Object:被代理对象
(6)AOP proxy:由AOP框架创建的对象,使用的是JDK动态代理或CGLIB动态代理
(7)Weaving 将代理逻辑添加到对目标类的具体连接点上,并创建动态代理的过程
3,Advice的时机由哪几种?
(1)Before 前置通知,在连接点之前调用,如果抛出异常则不会流转到连接点
(2)after 后置通知,在连接点以后调用,不管连接点是否执行正常,异常都会执行的通知
(3)afterRunning 返回通知,在连接点调用正常后使用,异常不会执行
(4)afterThrowing 异常通知,在连接点执行发生异常时使用
(5)Around 环绕通知,连接点的执行前后可执行自定义代码
4,实现springAop的途径有哪些
(1)xml配置文件实现(2)注解实现
5,Spring AOP和AspectJ的区别
(1)Spring AOP是纯Java实现,而AspectJ是使用Java语言的扩展类实现
(2)Spring AOP无需单独编译过程,AspectJ需要专属编译器
(3)Spring AOP仅需运行时编织,AspectJ运行时编织不可用,仅仅支持编译时编织,编译后和加载时编织
(4)Spring AOP仅仅支持方法编织,AspectJ可编织字段,方法,构造函数,静态初始值,final类,方法等,更为强大。
(5)Spring AOP只能在spring管理的bean身上实现,而AspectJ可以在所有领域对象上实施
(6)Spring AOP仅支持方法切入点,AspectJ支持所有切入点
(7)Spring AOP代理是针对目标对象创建的,并应用于这些代理。AspectJ在应用执行之前将切面编织进代码中
(8)Spring AOP比AspectJ慢很多
(9)Spring AOP易学会,AspectJ更为复杂
6,Spring AOP创建代理方式
(1)JDK动态代理:首选方式,每当目标对象实现一个接口时,都使用JDK动态代理
(2)CGLib代理,如果目标对象未实现接口,则使用CGLib代理