博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
匹配优先级Spring攻略学习笔记(3.04)------指定Aspect优先级
阅读量:4538 次
发布时间:2019-06-08

本文共 3627 字,大约阅读时间需要 12 分钟。

文章结束给大家来个程序员笑话:[M]

    一、知识点 

           当雷同连接点上应用了多个aspect时,aspect的优先级是不明确的,除非显式地指定它们的优先级。

           aspect的优先级可以通过现实Ordered口接或者用使@Order注解现实。

    二、代码示例

          (1)现实Ordered口接    

package com.codeproject.jackie.springrecipesnote.springaop;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.core.Ordered;/** * @author jackie *  */@Aspectpublic class CalculatorValidationAspect implements Ordered{	private Log log = LogFactory.getLog(this.getClass());		@Before("execution(* *.*(double, double))")	public void validateBefore(JoinPoint joinPoint) {		for (Object arg : joinPoint.getArgs()) {			log.info("validate begins...");			validate((Double) arg);		}	}	private void validate(Double arg) {		if (arg < 0) {			throw new IllegalArgumentException("Positive numbers only");		}	}	@Override	public int getOrder() {		return 0;	}} 

  

package com.codeproject.jackie.springrecipesnote.springaop;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.core.Ordered;/** * @author jackie *  */@Aspectpublic class CalculatorLoggingAspect implements Ordered{	private Log log = LogFactory.getLog(this.getClass());	/**	 * 切入点表达式匹配ArithmeticCalculator口接的add()方法的执行。	 * 表达式前导的星号匹配任何修饰符(public、protected和private)和任何回返类型。	 * 参数列表中的两个点匹配任何量数的参数。	 */	@Before("execution(* ArithmeticCalculator.add(..))")	public void logBefore() {		log.info("The method add() begins");	}	@Override	public int getOrder() {		return 1;	}}
    每日一道理
如果只看到太阳的黑点,那你的生活将缺少温暖;如果你只看到月亮的阴影,那么你的生命历程将难以找到光明;如果你总是发现朋友的缺点,你么你的人生旅程将难以找到知音;同样,如果你总希望自己完美无缺,假设你的这一愿望真的能如愿以偿,那么你最大的缺点就是没有缺点。

     只要在Bean配置文件中声明这个aspect的一个Bean例实,以可就在Spring中注册这个aspect:

      注意:aspect的优先级不取决于Bean声明的次序。getOrder()方法回返的值越低就代表越高的优先级。

    (2)@Order注解

      另一种指定优先级的方法是通过@Order注解。次序值在注解值中涌现。

package com.codeproject.jackie.springrecipesnote.springaop;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.core.annotation.Order;/** * @author jackie *  */@Aspect@Order(0)public class CalculatorValidationAspect {	private Log log = LogFactory.getLog(this.getClass());		@Before("execution(* *.*(double, double))")	public void validateBefore(JoinPoint joinPoint) {		for (Object arg : joinPoint.getArgs()) {			log.info("validate begins...");			validate((Double) arg);		}	}	private void validate(Double arg) {		if (arg < 0) {			throw new IllegalArgumentException("Positive numbers only");		}	}}
package com.codeproject.jackie.springrecipesnote.springaop;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.core.annotation.Order;/** * @author jackie *  */@Aspect@Order(1)public class CalculatorLoggingAspect{	private Log log = LogFactory.getLog(this.getClass());	/**	 * 切入点表达式匹配ArithmeticCalculator口接的add()方法的执行。	 * 表达式前导的星号匹配任何修饰符(public、protected和private)和任何回返类型。	 * 参数列表中的两个点匹配任何量数的参数。	 */	@Before("execution(* ArithmeticCalculator.add(..))")	public void logBefore() {		log.info("The method add() begins");	}}

      

文章结束给大家分享下程序员的一些笑话语录: 程序员的愿望

  有一天一个程序员见到了上帝.上帝: 小伙子,我可以满足你一个愿望.程序员: 我希望中国国家队能再次打进世界杯.
  上帝: 这个啊!这个不好办啊,你还说下一个吧!
  程序员: 那好!我的下一个愿望是每天都能休息6个小时以上.
  上帝: 还是让中国国家打进世界杯.

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/08/3067444.html

你可能感兴趣的文章
LeetCode No.168
查看>>
纪录jmeter loop controller 使用中的一个坑
查看>>
spring读取配置文件,且获取bean实例
查看>>
Xcode7 免证书真机测试
查看>>
史上最简单MySQL教程详解(基础篇)之数据类型
查看>>
802.11 帧封装细节
查看>>
WPF中Style文件的引用——使用xaml代码或者C#代码动态加载
查看>>
C#最佳工具集合:IDE、分析、自动化工具等
查看>>
把数字数值转换成单词形式
查看>>
Swift游戏实战-跑酷熊猫 14 熊猫打滚
查看>>
pdfjs预览pdf文件的两种方式(可复制)
查看>>
hdu1042N!
查看>>
UVA10010 - Where's Waldorf?
查看>>
Coder-Strike 2014 - Round 1(A~E)
查看>>
【BZOJ2739】—最远点(决策单调性+分治)
查看>>
shell 流程控制
查看>>
MVC学习-发送请求
查看>>
微信开发-ACCESS TOKEN 过期失效解决方案
查看>>
(转)正则表达式验证大全
查看>>
被汉得拒绝以后
查看>>