zoukankan      html  css  js  c++  java
  • Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探

    由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现。

    本文一下未贴出的相关代码示例请关注小编的上篇博文《Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较》,在此不再赘述。

    基于AspectJ注解配置的AOP编程,就是将所有配置信息都放在源代码中以注解的方式标注。以与“基于XML配置”的AOP编程相区别。

    1)Spring AOP注解就是依赖AspectJ来实现。因此使用Spring AOP注解,必须引入Aspectj框架及相应的包(aspectjrt.jar和aspectjweaver.jar)。

    关于包的下载与引入,请参考小编的另外一篇博文《Spring学习之旅(五)极速创建Spring AOP java工程项目

    所以“基于AspectJ注解配置的AOP编程”实际上是:Spring AOP+AspectJ框架进行切面编程。

    2)创建Spring配置文件,并在配置文件中引入aop命名空间和context命名空间,并配置“AspectJ的注解支持”,以及自动扫描的包的支持。

    3)基于AspectJ注解声明切面

    即在设计切面类时,在java源代码中采用注解标注“切面的相关信息”。

    讲一个java类声明为一个切面:

    首先,要注解成一个Bean,必须是IoC的Bean,可以是用@Component注解定义Bean。

    其次,注解声明为一个切面,使用@Aspect注解,同时在类的方法注解中给出与该切面相关的“通知”和“切入点”

    然后,我们还可以指定切面的优先级,使用@Order(级别号)。级别号为大于等于0的整数,值越小,优先级越高。

    4)基于AspectJ注解声明通知

    标注在切面类的方法上,AspectJ支持5种类型的通知注解:

    @Before、@After、@AfterRunning、@AfterThrowing、@Around

    举一个例子:

        //注解为前置通知,并注解其切入点表达式
        @Before("execution(* com.edu.aop.ArithmeticCalculator.*(..))")
        public void validationArgs(JoinPoint joinPoint){
            //具体方法实现  
    }    

    在上篇博文中的实例中,给出了通知内切入点表达式的两种写法:一种具体确定的;一种泛化的。

    当通知括号内除了切入点表达式属性外,还有其他属性时,应写明属性对应的属性值。

    比如:

    @AfterRunning(pointcut="execution(* com.edu.aop.*.*(..))",returning="abc")
        public void afterMethod(JoinPoint joinPoint,Object abc){
            //具体方法实现
        }
        
    @AfterThrowing(pointcut="execution(* com.edu.aop.*.*(..))",throwing="e")
        public void afterMethod(JoinPoint joinPoint,ArithmeticException e){
            //具体方法实现
        }
        
  • 相关阅读:
    P3501 [POI2010]ANT-Antisymmetry
    P3498 [POI2010]KOR-Beads(hash表)
    UVA10298 Power Strings
    UVA1714 Keyboarding(bfs)
    P4289 [HAOI2008]移动玩具(bfs)
    Ubuntu分辨率太小的解决方案
    Ubuntu分辨率太小的解决方案
    主板亮红灯,显示器没信号
    主板亮红灯,显示器没信号
    VS注释与取消注释快捷键
  • 原文地址:https://www.cnblogs.com/dudududu/p/8488757.html
Copyright © 2011-2022 走看看