1.说出Spring的通知类型有哪些

如题所述

第1个回答  2019-08-02
aop里有切点,切面,通知的概念
term
术语
definition
定义
concern
a
particular
issue
(关注特定问题)
感兴趣应用的特定问题、概念、范围。例如,事务管理、持久化、日志、安全等。
crosscutting
concern
(横切关注点)
在关注点实现中贯穿了很多类,这在面向对象(oop)中通常很难实现和维护。
aspect(切面)
模块化的横切关注点,通过代码的聚合和隔离实现。
join
point(连接点)
在程序或者类执行时的一个点。在spring的aop实现中,连接点总是一个方法调用。其他的例子包括访问字段(包括实例中字段的读写),变量和异常处理。
advice(通知)
特定连接点所采取的动作。spring有几种不同类型的通知,包括around、before、throws和after
returning。在这几种类型的通知中,around是最强大的,在方法调用的前后都有执行一些操作的机会。之前用到的traceinterceptor就是around类型的通知,它实现了aop联盟的methodinterceptor接口。通过实现下面的spring接口可以使用其他类型的通知:
methodbeforeadvice
throwsadvice
afterreturningadvicepointcut(切入点)
连接点的集合,这些连接点确认何时一个通知将会触发。切入点通常使用正则表达式或者是通配符语法。
introduction
(引入)
添加字段或者方法到一个通知类。spring允许你在任何通知对象上引入新的接口。例如,你可以使用引入以便让任意对象实现ismodified接口,来简化缓存。
weaving(组织)
装配切面来创建一个被通知对象。可以在编译期间完成(像aspectj做的那样)也可以在运行时完成。本章后面的组织策略部分详细讨论不同的组织策略(也就是实现aop)。
interceptor
(拦截器)
一种aop实现策略,对与特点的连接点,可能存在一个拦截器链。
aop
proxy(aop代理)
aop框架创建的对象,包括通知。在spring中,一个aop代理可能是jdk动态代理或者是cglib代理。
target
object
(目标对象)
包含连接点的对象。在使用拦截的框架中,它是在拦截器链末端的对象实例。也叫做被通知对象或者被代理对象。
切面。
用个比喻会更形象一些。可以把切面理解成一把菜刀,而其他方法就好像是黏糕,如果你要把所有的黏糕都在某个
位置切断,那么就用这个菜刀就行了。这个菜刀,就是我们需要的切面类。
例如execution(*
com.xyz.someapp.service.*.*(..))
尾部(after),还是首尾(around)等等。
这些“插入”的代码都是程序运行的时候动态插入的,所以看起来很神奇
有两种方式,一种是java本身提供了动态代理方式,这种方式基于接口;另一种是cglib这样的,动态修改java运行时的字节码
然后使用“通知”,确定切入的地点:是在头部(before),