java八股文,详细介绍啦springAOPAOP术语 连接点(Joinpoint) 连接点是在应用执行过程中能够插入切面(Aspect)的一个点。这些 点可以是调用方法时、甚至修改一个字段时。 切点(PointCut)指通知(Advice)所要织入(Weaving)的具体位置 切点用于来限定Spring-AOP启动的范围,通常我们采用表达式的方式来设置,所以关键词 是范围 通知(Advice) 通知是织入到目标类连接点上的一段程序代码。在Spring中,像 BeforeAdvice等还带有方位信息 通知是直译过来的结果,我个人感觉叫做“业务增强”更合适 对照代码就是拦截器定义的 相关方法,通知分为如下几种: 1. 前置通知(before):在执行业务代码前做些操作,比如获取连接对象,登陆鉴权 2. 后置通知(after):在执行业务代码后做些操作,无论是否发生异常,它都会执行, 比如关闭连接 3. 异常通知(afterThrowing):在执行业务代码后出现异常,需要做的操作,比如回 滚事务 4. 返回通知(afterReturning),在执行业务代码后无异常,会执行的操作 5. ### Java八股文-Spring AOP详解 #### 一、AOP概述 面向切面编程(Aspect-Oriented Programming, AOP)是一种编程思想,它作为面向对象编程(Object-Oriented Programming, OOP)的一种补充。传统的面向对象设计模式往往难以解决横切关注点的问题,例如日志记录、性能统计、安全控制、事务处理等功能,这些功能往往贯穿分布于应用的多个模块之中。AOP的主要目的是为了更好地分离业务逻辑和这些横切关注点,使得开发者能够在不修改源代码的情况下为系统添加这些通用功能。 #### 二、AOP的核心概念 在深入了解Spring AOP之前,我们需要先了解AOP的一些核心概念: 1. **连接点(Joinpoint)** - 定义:在应用程序执行过程中能够插入切面(Aspect)的点。这些点可以是方法调用、字段修改等。 - 示例:在一个方法被调用时,该方法就是一个连接点。 2. **切点(Pointcut)** - 定义:指定了通知(Advice)应该在哪些连接点上生效。 - 示例:可以使用表达式来指定所有以`get`开头的方法作为切点。 3. **通知(Advice)** - 定义:在切点处执行的代码片段,用于实现具体的增强逻辑。 - 示例:在某个方法调用前后执行的日志记录逻辑。 4. **目标对象(Target)** - 定义:需要被增强的对象或类。 5. **织入(Weaving)** - 定义:将通知应用到目标对象的过程。 - 示例:在编译期或者运行期将增强逻辑加入到目标对象的方法中。 6. **代理类(Proxy)** - 定义:AOP织入增强后生成的新类,它可以替代原目标对象进行操作。 - 示例:使用Spring AOP时生成的代理对象。 7. **切面(Aspect)** - 定义:包含切点和通知的组合体。 - 示例:事务管理切面包含了指定的切点以及相应的前置通知和后置通知。 #### 三、通知类型 通知是指在程序执行的特定时刻插入的代码片段,它们可以在连接点的不同阶段执行。Spring AOP支持以下几种类型的通知: 1. **前置通知(Before)** - 描述:在连接点(通常是方法调用)之前执行的通知。 - 应用场景:用于执行如开启数据库连接、登录认证等操作。 2. **后置通知(After)** - 描述:无论方法是否成功执行,都会在其之后执行的通知。 - 应用场景:关闭资源、释放锁等操作。 3. **异常通知(AfterThrowing)** - 描述:当连接点抛出异常后执行的通知。 - 应用场景:记录错误日志、回滚事务等。 4. **返回通知(AfterReturning)** - 描述:当连接点正常返回后执行的通知。 - 应用场景:清理临时数据、记录返回结果等。 5. **环绕通知(Around)** - 描述:环绕连接点执行的通知,它可以决定是否继续执行连接点。 - 应用场景:性能监控、事务管理等。 #### 四、Spring AOP的代理机制 Spring AOP支持两种类型的代理机制来生成代理对象: 1. **JDK动态代理** - 特点:基于Java反射机制,仅适用于实现了接口的目标对象。 - 优点:生成速度快,运行时性能较好。 - 缺点:仅能针对接口编程。 2. **Cglib动态代理** - 特点:通过字节码技术实现,适用于未实现接口的目标对象。 - 优点:可以针对类和接口。 - 缺点:启动类较慢,生成代理对象的速度相对较慢。 #### 五、应用场景 AOP广泛应用于各种场景中,包括但不限于: - **日志记录**:自动记录方法调用的时间、参数等信息。 - **权限验证**:在方法调用前进行权限检查。 - **事务管理**:自动管理方法调用前后的事务状态。 #### 六、总结 Spring AOP作为一种强大的面向切面编程框架,极大地简化了开发过程中的横切关注点处理。通过对上述核心概念和通知类型的深入理解,我们可以更加灵活地运用Spring AOP来满足实际项目需求。同时,选择合适的代理机制也是提高程序性能的关键之一。
- 粉丝: 1760
- 资源: 401
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助