基于Schema方式的5种通知类型

<aop:config>
        <!--配置切入点-->
        <aop:pointcut id="pointcut" expression="execution(* com.itany.service.impl..*.*(..))"/>
        <!--配置切面-->
        <aop:aspect ref="testAspect">
            <!--前置通知-->
            <aop:before pointcut-ref="pointcut" method="beforeAdvice"/>
            <!--后置最终通知-->
            <aop:after pointcut="execution(* com.itany.service.impl..*.*(..))" method="afterFinallyAdvice"/>
            <!--后置返回通知-->
            <aop:after-returning pointcut="execution(* com.itany.service.impl.*.sayAfterReturning*(..))"
                         method="afterReturningAdvice"
                         arg-names="obj"
                         returning="obj"/>
            <!--后置异常通知-->
            <aop:after-throwing pointcut="execution(* com.itany.service.impl.*.sayAfterThrowing*(..))"
                                method="afterThrowingAdvice"
                                arg-names="excep"
                                throwing="excep"/>
            <!--环绕通知 第一个参数必须是org.aspectj.lang.ProceedingJoinPoint类型-->
            <aop:around pointcut="execution(* com.itany.service.impl.*.sayAround*(..))"
                        method="aroundAdvice"/>
        </aop:aspect>
    </aop:config>

说明:

  • execution( com.itany.service.impl...*(..))表示impl包下任何方法
  • execution( com.itany.service.impl..sayAfterThrowing*(..))这表示选取某个特定的方法
  • arg-names属性中的取值和调用方法的参数名不一定要相同,可以随便取个
  • 环绕通知 第一个参数必须是org.aspectj.lang.ProceedingJoinPoint类型
 
时间: 2024-10-23 01:28:04

基于Schema方式的5种通知类型的相关文章

spring框架学习6:spring-aop的五种通知类型

使用springaop时需要注意,如果bean对象,即service层的对象没有实现接口的话,使用spring-aop的话会报错,因此需要在service层创建接口. spring-aop的基层是基于动态代理来实现的,动态代理的实现有两种方式: 1.jdk动态代理 spring模式默认使用jdk动态代理,jdk动态代理要求目标类的对象必须实现一个接口,而且获取目标类对象的时候要做向上转型为接口. 2.cglib动态代理 cglib代理方式spring aop也支持,cglib实现动态代理的时候,

spring aop的五种通知类型

昨天在腾讯课堂看springboot的视频,老师随口提问,尼玛竟然回答错了.特此记录! 问题: Spring web项目如果程序启动时出现异常,调用的是aop中哪类通知? 正确答案是: 异常返回通知. 回答问题的关键是,你得知道aop有哪几种通知类型吧! spring aop通知(advice)分成五类: 前置通知[Before advice]: 在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常. 正常返回通知[After returning advice]: 在连接点正常执行完

Spring4深入理解AOP02----AOP简介,AspectJ基于注解(5种通知,切面优先级)

参考代码下载github:https://github.com/changwensir/java-ee/tree/master/spring4 一.AOP简介 ?AOP(Aspect-Oriented Programming, 面向切面编程):是一种新的方法论,是对传统OOP(Object-OrientedProgramming,面向对象编程)的补充. ?AOP 的主要编程对象是切面(aspect),而切面模块化横切关注点. ?在应用 AOP 编程时,仍然需要定义公共功能,但可以明确的定义这个功

开涛spring3(6.3) - AOP 之 6.3 基于Schema的AOP

6.3  基于Schema的AOP 基于Schema的AOP从Spring2.0之后通过“aop”命名空间来定义切面.切入点及声明通知. 在Spring配置文件中,所以AOP相关定义必须放在<aop:config>标签下,该标签下可以 有<aop:pointcut>.<aop:advisor>.<aop:aspect>标签,配置顺序不可变. <aop:pointcut>:用来定义切入点,该切入点可以重用: <aop:advisor>:

Spring 2.0 的AOP介绍及其通知类型

Spring 2.0的AOP 在Spring 2.0中最激动人心的增强之一是关于Spring AOP,它变得更加便于使用而且更加强大,主要是通过复杂而成熟的AspectJ语言的支持功能来实现,而同时保留纯的基于代理的Java运行时.Spring 2.0的AOP提供给我们一种新的思考程序结构的方法,能够解决很多纯OOP无法解决的问题--让我们能够在一个模块中实现某些需求,而不是以发散的方式实现.Spring 2.0允许用户选择使用基于模式或@AspectJ注解的方式来自定义切面.这两种风格都支持所

一起学Spring之注解和Schema方式实现AOP

概述 在上一篇,我们了解了通过实现接口和XML配置的方式来实现AOP,在实现注解方式AOP之前,先了解一下AspectJ.AspectJ是一个面向切面的框架,它扩展了Java语言,定义了AOP语法,能够在编译时实现代码的注入.Spring通过集成ApsectJ实现了以注解方式定义通知类,大大减少了配置文件的工作量.本文主要讲解通过注解方式和Schema方式实现AOP编程,仅供学习分享使用,如有不足之处,还请指正. 实现AOP的三种方式: 通过实现相应接口,并配置Xml进行实现,可以参考上一篇.

spring AOP (包含基于注解和配置文件两种方式)

spring AOP?面向切面编程,区别于面向对象编程OOP AspectJ: 是Java社区里面最完整最流行的AOP框架,下面就用aspectJ来上例子 一.基于注解方式 步骤如下: 引入jar包(spring的必要jar包 以及aspectj的jar包) 业务方法HelloworldService (类上加上注解@Component,放入到spring ioc容器中) 切面LogingAop (类上加上注解@Component使其加入到ioc容器中,还需要注解@Aspect,使其成为一个切面

Spring-AOP的五种通知方式

AOP的五种通知方式: 前置通知:在我们执行目标方法之前运行(@Before) 后置通知:在我们目标方法运行结束之后,不管有没有异常(@After) 返回通知:在我们的目标方法正常返回值后运行(@AfterReturning) 异常通知:在我们的目标方法出现异常后运行(@AfterThrowing) 环绕通知:目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,joinPoint.procced()就是执行目标方法的代码 .环绕通知可以控制返回对象(@Around) 一.导jar包 co

项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 7. 基于treegrid实现菜单展示 2 常见的权限控制方式 2.1 url拦截实现权限控制 shiro基于过滤器实现的   2.2 注解方式实现权限控制 底层:代理技术     3 基于shiro的url拦截方式验权   <!-- 配置过滤器工厂 --> <bean id="