spring - AOP 基础(一)

简介:

spring AOP 

spring支持四种拦截类型:目标方法调用前,目标方法调用后,目标方法调用前后,方法抛出异常。


spring Aop采用动态代理的方式生成代理类,前面分析过动态代理和静态代理以及区别,可以点击我的博客。

一些术语解释。


连接点:

程序的某个位置,就是程序也就是类里的方法,一个类可以有多个方法,多个连接点,就是在这些方法前后异常等做文章。


切点:

可能会和连接点混淆,类里有多个连接点,那么程序或者项目执行的时候如何找到对应的连接点?切点就是做这个工作的,

切点帮你定位到对应的连接点,然后执行那四种拦截,进行增强。


增强:

切点定位到具体的连接点,定位到了,我们需要对其做点什么,不能就定位到了那里就完事吧。增加就是对目标类的连接点也就是方法

执行一段逻辑。


目标对象:

被一个或者多个切面所通知的对象。


织入:

织入就是把增强类加入到目标类的里的具体连接点上,Aop有三种织入方式,编译器织入,装载器织入,动态代理织入。

切面:由增强和切点组成,横切关注点。


Spring 对AOP的支持,目前比较流行的两种方式,一是spring 本身支持AOP的方式,二是就是比较流行的框架Aspectj。


先来说说spring本身对AOP的支持。


异常通知拦截,为什么先说这个,因为这个ThrowsAdvice接口里面什么都没有,不像AfterAdvice,MethodBeforeAdvice,MethodInterceptor

这几种方式,有方法实现。


异常抛出通知:


package com.lw.rpc.test;


import java.lang.reflect.Method;


import net.sf.cglib.reflect.FastClass;

import net.sf.cglib.reflect.FastMethod;


import org.springframework.aop.ThrowsAdvice;

import org.springframework.aop.framework.ProxyFactory;


/**

 * ThrowsAdvice 异常统计拦截

 * 

 * @author

 *

 */

public class SpringAopAdvice implements ThrowsAdvice {

/**

 * 对未知异常的处理.

 */

public void afterThrowing(Method method, Object[] args, Object target, NumberFormatException ex) throws Throwable {

System.out.println("出现异常的类: " + target.getClass().getName());

System.out.println("出现异常的方法: " + method.getName());


System.out.println(" 具体什么异常 : " + ex.getClass().getName());

}


public static void main(String[] args) {

SpringAopBean bean = new SpringAopBean();


ProxyFactory pf = new ProxyFactory();

pf.setTarget(bean);

pf.addAdvice(new SpringAopAdvice());


SpringAopBean proxy = (SpringAopBean) pf.getProxy();


try {

// 测试

proxy.aopMethod1("spring");

} catch (Exception e) {

e.printStackTrace();

}

}

}


目标类:

package com.lw.rpc.test;


public class SpringAopBean {


public void aopMethod() throws NullPointerException {

System.out.println("空指针异常");

}

public int aopMethod1(String numStr) throws NumberFormatException {

int num = Integer.parseInt(numStr);

return num;

}

}


其他的几种方式,实现AfterAdvice,MethodBeforeAdvice,MethodInterceptor这三个接口就可以实现。



本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1916507



相关文章
|
2月前
|
监控 安全 Java
Spring AOP实现原理
本内容主要介绍了Spring AOP的核心概念、实现机制及代理生成流程。涵盖切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)等关键概念,解析了JDK动态代理与CGLIB代理的原理及对比,并深入探讨了通知执行链路和责任链模式的应用。同时,详细分析了AspectJ注解驱动的AOP解析过程,包括切面识别、切点表达式匹配及通知适配为Advice的机制,帮助理解Spring AOP的工作原理与实现细节。
|
6月前
|
XML Java 开发者
Spring Boot中的AOP实现
Spring AOP(面向切面编程)允许开发者在不修改原有业务逻辑的情况下增强功能,基于代理模式拦截和增强方法调用。Spring Boot通过集成Spring AOP和AspectJ简化了AOP的使用,只需添加依赖并定义切面类。关键概念包括切面、通知和切点。切面类使用`@Aspect`和`@Component`注解标注,通知定义切面行为,切点定义应用位置。Spring Boot自动检测并创建代理对象,支持JDK动态代理和CGLIB代理。通过源码分析可深入了解其实现细节,优化应用功能。
260 6
|
5月前
|
XML Java 测试技术
Spring AOP—通知类型 和 切入点表达式 万字详解(通俗易懂)
Spring 第五节 AOP——切入点表达式 万字详解!
252 25
|
5月前
|
XML 安全 Java
Spring AOP—深入动态代理 万字详解(通俗易懂)
Spring 第四节 AOP——动态代理 万字详解!
144 24
|
4月前
|
Java API 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——Spring Boot 中的 AOP 处理
本文详细讲解了Spring Boot中的AOP(面向切面编程)处理方法。首先介绍如何引入AOP依赖,通过添加`spring-boot-starter-aop`实现。接着阐述了如何定义和实现AOP切面,包括常用注解如`@Aspect`、`@Pointcut`、`@Before`、`@After`、`@AfterReturning`和`@AfterThrowing`的使用场景与示例代码。通过这些注解,可以分别在方法执行前、后、返回时或抛出异常时插入自定义逻辑,从而实现功能增强或日志记录等操作。最后总结了AOP在实际项目中的重要作用,并提供了课程源码下载链接供进一步学习。
179 0
|
4月前
|
Java 开发者 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——什么是AOP
本文介绍了Spring Boot中的切面AOP处理。AOP(Aspect Oriented Programming)即面向切面编程,其核心思想是分离关注点。通过AOP,程序可以将与业务逻辑无关的代码(如日志记录、事务管理等)从主要逻辑中抽离,交由专门的“仆人”处理,从而让开发者专注于核心任务。这种机制实现了模块间的灵活组合,使程序结构更加可配置、可扩展。文中以生活化比喻生动阐释了AOP的工作原理及其优势。
91 0
|
6月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
313 8
|
8月前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
230 2
Spring Aop该如何使用
|
8月前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
204 5
|
8月前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
278 8

热门文章

最新文章