spring的aop的使用
2017-07-08 17:01
155 查看
使用@Aspect标签标注的类就是一个切面类
@Before标识这个方法是个前置通知,切点表达式表示执行ArithmeticaCalculator借口的add()方法。
execution * com.spring.AritheticCalculator.*(..)
第一个*代表匹配任意修饰符及任意返回值,也可设置固定的返回参数如public int
第二个*代表任意方法
..在方法参数列表中使用,不限定类型。顺序。个数
@After标识与@Before使用方法相同,只是次切点是在连接点后面执行
注:无论此连接点方法是否能够正常执行,@After方法都会执行
@AfterReturning需要连接点方法正常返回之后才会执行
此标签后的returning参数的作用是告知spring要获取目标对象方法(被代理对象)返回值, result
通知的参数列表中,指定一个形参名字和returning属性中的名字一致
JoinPoint类型是框架中获取连接点详细信息的方法类
@AfterThrowing
环绕通知
是否执行这个连接点
环绕通知需要在通知方法的参数列表中,提供一个ProceedingJoinPoint接口类型参数的形参
使用接口类来实现
给方法加入一个@PointCut(“切点表达式”)
通知当中pointcut=”方法名称()”
一、习惯利用注解的方式来进行aop的配置,AOP框架兼容注解的,注解的方法有重用性
二、如何配置:
1)导入aop命名空间
2)通过bean标签来完成目标对象以及切面实例的配置
3)
在项目的xml配置文件中配置
作用:用来自动生成所有被Aspect标注修饰的类生成代理对象
同样要在切面代理类和被代理类前面加入@Component标签,让spring扫描创建一个切面代理类的实例
@Aspect @Comment public class CalculatorLoggingAspect{ private Log log = LogFactory.getLog(this.getClass()); @Before("execution(* ArithmeticCalculator.add(..))") public void logBefore(JoinPoint jp){ Object[] args = jp.getArgs(); String methodName = jp.getSignature().getName(); log.info("The method add() begins"); } }
@Before标识这个方法是个前置通知,切点表达式表示执行ArithmeticaCalculator借口的add()方法。
execution * com.spring.AritheticCalculator.*(..)
第一个*代表匹配任意修饰符及任意返回值,也可设置固定的返回参数如public int
第二个*代表任意方法
..在方法参数列表中使用,不限定类型。顺序。个数
@After标识与@Before使用方法相同,只是次切点是在连接点后面执行
注:无论此连接点方法是否能够正常执行,@After方法都会执行
@AfterReturning需要连接点方法正常返回之后才会执行
此标签后的returning参数的作用是告知spring要获取目标对象方法(被代理对象)返回值, result
通知的参数列表中,指定一个形参名字和returning属性中的名字一致
JoinPoint类型是框架中获取连接点详细信息的方法类
@AfterReturning(pointcut="exection(public int com.spring.aop.ComputerImpl1.*(..))",returning="result") public void c(JoinPoint jp,Object result){ }
@AfterThrowing
@AfterThrowing(poincut="exection(public int com.spring.aop.ComputerImpl1.*(..))",throwing="ex") public void d(JoinPoint jp,Exception ex){ Object[] args = jb.getArgs(); String methodName = jp.getSignature().getName(); System.out.println(“出现了异常”+ ex.getMessage()); }
环绕通知
是否执行这个连接点
环绕通知需要在通知方法的参数列表中,提供一个ProceedingJoinPoint接口类型参数的形参
@Around("exection(public int com.spring.aop.ComputerImpl1.*(..))") public void e(ProceedingJoinPoint pjp){ pjp.getSingnature().getName() try{ //前置通知 pjp.proceed(); //返回值通知 }catch(Throwable e1){ System.out.print("出现了异常"); e1.printStackTrac(); } //后置通知 }
切面优先级
在切面前面添加一个@Order()标签在里面添加参数,参数值越小优先级越高使用接口类来实现
public class ValidateAspect implements Ordered{ @Override public int get Order(){ return 0 } }
重用切入点表达式
写一个方法没有方法体给方法加入一个@PointCut(“切点表达式”)
通知当中pointcut=”方法名称()”
@Aspect @Comment public class ComputerAspect{ @Pointcut("exection(public int com.spring.aop.ComputerImpl1.*(..))") public void getExcecution(){ } @Before("getExcecution()") public void logBefore(JoinPoint jp){ Object[] args = jp.getArgs(); String methodName = jp.getSignature().getName(); } }
基于xml形式配置AOP
一、习惯利用注解的方式来进行aop的配置,AOP框架兼容注解的,注解的方法有重用性
二、如何配置:
1)导入aop命名空间
<aop:config></aop:config>
2)通过bean标签来完成目标对象以及切面实例的配置
3)
<aop:config> <aop:pointcut expression="切点表达式" id=""/> <aop:aspect id="" ref="引用的类的实例"> <aop:before method="方法名称" pointcut="具体的切入点"或 pointcur-ref="重用的切入点" <aop:aspect> <aop:config>
在项目的xml配置文件中配置
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>的标签
作用:用来自动生成所有被Aspect标注修饰的类生成代理对象
同样要在切面代理类和被代理类前面加入@Component标签,让spring扫描创建一个切面代理类的实例
相关文章推荐
- spring3.0.5的aop使用
- 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-使用工厂创建代理(Using the ProxyFactoryObject to create AOP proxies)
- spring 直接使用ProxyFactoryBean 实现AOP 流程小结
- Spring 配置使用 - AOP 通知类型
- (转)Spring Boot中使用AOP统一处理Web请求日志
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(四)Spring AOP中使用log4j实现http请求日志入mongodb
- SpringBoot开发详解(六)-- 异常统一管理以及AOP的使用
- ASP.NET MVC3 中整合 NHibernate3.3、Spring.NET2.0 使用AOP执行事务处理
- Spring5.0.4 AOP 使用AspectJ方式自动代理注解(@EnableAspectJAutoProxy)
- springboot【19】日志管理之使用AOP统一处理Web请求日志
- Spring AOP进行日志记录,管理 (使用Spring的拦截器功能获取对action中每个方法的调用情况)
- 使用Spring AOP记录Controller层操作日志
- 【spring】IllegalArgumentException Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误
- Spring学习之旅(二) AOP(面向切面编程)的使用
- spring的AOP个人理解和使用
- spring(二) AOP之AspectJ框架的使用
- springboot学习(7)springboot使用AOP打印日志信息
- struts2 与 spring 使用aop处理Action异常
- 使用Spring AOP和自定义注解记录日志
- SpringAOP快速使用