Spring AOP
AOP是什么
面向切面编程(AOP)是一种能够将那些非核心的、散布在各处的通用功能(如日志记录、安全校验、事务管理等)抽离出来,形成一个独立的模块,然后在需要的时候,再织入到核心业务代码中的编程范式。
AOP核心术语
- Aspect(切面):抽离出来的模块本身,它是由Advice(通知)和Pointcut(切点)组成的。
- Join Point(连接点):程序执行过程中可以插入切面的点。例如方法执行前、执行后、异常抛出都可以看做是一个连接点。
- Pointcut(切入点):一个表达式,定义了Advice应该应用到哪些连接点上。(个人理解:有一个板子要打孔,整个板子好多地方都可以打孔(连接点),但是我们只需要其中几个孔就可以完成固定(切入点),切入点一定是连接点,但是连接点不一定是切入点)。
- Advice(通知):切面在切入点会采取的行动。常见的通知类型有:
- Before前置通知:在连接点之前运行的通知,但它没有能力阻止执行流进行到连接点,除非抛出异常。
- After后置通知:无论连接点以何种方式退出(正常返回或抛出异常)后运行通知。
- AfterReturning后置返回通知:在连接点正常完成后运行的通知。
- AfterThrowing后置异常通知:如果方法因为抛出异常而退出时运行的通知
- Around环绕通知:是一种功能强大的通知类型,环绕通知可以在方法调用之前和之后执行自定义行为。还负责选择是否继续执行后续连接点。
- Target Object(目标对象):被一个或多个切面所通知的对象,也就是那些包含核心业务逻辑的对象。
- Weaving(织入):将切面应用到目标对象,从而创建代理对象的过程。可以在编译期、类加载期或运行时实现,Spring AOP是在运行时实现织入的。