spring
为什么要学习Spring框架
- 方便解耦,简化开发
通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。
有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。 - AOP编程的支持
通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。 - 声明式事务的支持
在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
AOP的基本概念
- Aspect(切面):通常是一个类,里面可以定义切入点(通常是一个表达式)和通知
- JointPoint(连接点):程序执行过程中明确的点,一般是方法
- Advice(通知) 就是对方法进行增强,分为前置通知,后置通知,最终通知,异常通知,环绕通知
- Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
- AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以使用CGLIB代理,前者基于接口,后者基于子类
通知方法
- 前置通知:在我们执行目标方法之前运行(@Before)
- 后置通知:在我们目标方法运行结束之后 ,不管有没有异常(@After)
- 返回通知:在我们的目标方法正常返回值后运行(@AfterReturning)
- 异常通知:在我们的目标方法出现异常后运行(@AfterThrowing)
- 环绕通知:动态代理, 需要手动执行joinPoint.procced()(其实就是执行我们的目标方法执行之前相当于前置通知, 执行之后就相当于我们后置通知(@Around)
底层是代理模式(动态代理)
- AOP是Spring框架面向切面的编程思想,AOP采用一种称为“横切”的技术,将涉及多业务流程的通用功能抽取并单独封装,形成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置中
各通知在程序中的执行顺序
- 没有异常的情况
前置通知-后置(最终)通知-返回后通知 - 发生异常的情况
前置通知-后置(最终)通知-异常通知
execution表达式规则
- @pointcut(“execution (void aop.Student.*(..))”)
使用spring AOP的流程
- 创建切面类,使用@Aspect标注此类是一个切面,@Component把此类交给spring进行管理
- 此类中定义切入点(可以使用@PointCut注解定义,也可以在通知使用pointCut属性定义),编写切入点表达式,切入点表达式标注出哪些方法需要被切入
- 在切面类中定义通知,通知为如何对方法进行增强
- 被增强对象也需要被spring进行管理
@befor
- 标注此方法是前置通知,在切入点执行之前执行,可以在前置通知方法中使用JoinPoint类型作为形参,然后从此形参中获取切入点的各种信息
@AfterReturning
- 表示此方法是返回后通知,在切入点成功返回返回值之后执行,可以使用returning属性标注出形参中接收切入点返回值的参数
@AfterThrowing
- 表示此方式是异常通知,在切入点发生异常时执行,可以使用throwing属性标注出形参中接收切入点发生异常的参数
@After
- 标注此方式是后置通知也叫最终通知,在切入点执行完之后执行,即使发生异常也会执行
@Aroud
- 标注此方法为环绕通知,在环绕通知中可以使用形参为ProceedingJoinPoint类型,在方法中可以使用ProceedingJoinPoint执行被增强方法,以及获取被增强方法的各种参数
本章节讲解了spring的AOP,通过Spring提供的AOP功能,方便进行面向切面的编程
希望对你有帮助