首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何为@Service注解的、返回类型为void的类的所有方法编写切入点

为@Service注解的、返回类型为void的类的所有方法编写切入点,可以使用Spring AOP来实现。

首先,需要在Spring配置文件中启用AOP的支持,可以通过在配置文件中添加以下代码来实现:

代码语言:xml
复制
<aop:aspectj-autoproxy/>

接下来,创建一个切面类,用于定义切入点和增强逻辑。切面类需要使用@Aspect注解进行标注,并且需要在类中定义切入点和增强逻辑。

代码语言:java
复制
@Aspect
@Component
public class MyAspect {
    
    @Pointcut("@annotation(org.springframework.stereotype.Service) && execution(void *(..))")
    public void serviceMethods() {}
    
    @Before("serviceMethods()")
    public void beforeServiceMethods(JoinPoint joinPoint) {
        // 在@Service注解的、返回类型为void的类的所有方法执行之前执行的逻辑
    }
    
    @AfterReturning("serviceMethods()")
    public void afterReturningServiceMethods(JoinPoint joinPoint) {
        // 在@Service注解的、返回类型为void的类的所有方法成功返回之后执行的逻辑
    }
    
    @AfterThrowing("serviceMethods()")
    public void afterThrowingServiceMethods(JoinPoint joinPoint) {
        // 在@Service注解的、返回类型为void的类的所有方法抛出异常时执行的逻辑
    }
    
    @After("serviceMethods()")
    public void afterServiceMethods(JoinPoint joinPoint) {
        // 在@Service注解的、返回类型为void的类的所有方法执行之后执行的逻辑(无论是否抛出异常)
    }
}

在上述代码中,通过@Pointcut注解定义了一个切入点serviceMethods(),该切入点匹配所有被@Service注解标注的、返回类型为void的方法。然后,通过@Before、@AfterReturning、@AfterThrowing和@After注解分别定义了在切入点方法执行前、成功返回后、抛出异常后以及执行后的增强逻辑。

最后,需要将切面类注册到Spring容器中,可以通过在配置文件中添加以下代码来实现:

代码语言:xml
复制
<bean id="myAspect" class="com.example.MyAspect"/>

这样,当被@Service注解标注的、返回类型为void的类的方法被调用时,切面类中定义的增强逻辑将会被触发执行。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

动力节点Spring框架学习笔记-王鹤(二)AOP面向切面编程

:指定所有包下 serivce 子包下所有(接口)中所有方法切入点 execution(* com.xyz.service.IAccountService+.*(..))...(String,int)方法,且 joke()方法第一个参数是 String,第二个参数是 int;如果方法参数类型是 java.lang 包下,可以直接使用名,否则必须使用全限定名,...在目标方法执行之后执行 由于是目标方法之后执行,所以可以获取到目标方法返回值 该注解returning属性就是用于指定接收方法返回变量名 所以,被注解后置通知方法,除了可以包含 JoinPoint...被注解环绕增强方法要有返回值 被注解环绕增强方法要有返回值,Object 类型。...} 2.3.9 @Pointcut 定义切入点 当较多通知增强方法使用相同 execution 切入点表达式时,编写、维护均较为麻烦;AspectJ 提供了@Pointcut 注解,用于定义 execution

17300

详解Java中高级程序员必须要掌握Spring Aop(上篇)

所有通知参数都是静态类型,因此你可以使用确定类型通知参数(例如一个方法执行返回类型),而不是对象数组。 匹配切点表达式连接点概念是AOP中关键,它将AOP与只提供拦截旧技术区分开来。...在AOP @AspectJ 注释风格中,切入点签名由一个常规方法定义提供,切入点表达式通过使用@Pointcut注解来表示(作为切入点签名方法必须是void返回类型)。...; within: 限制匹配连接点目标对象确定; this: 限制匹配连接点具有指定bean引用类型实例; target: 限制匹配连接点目标对象指定实例; args: 限制匹配连接点目标对象方法参数指定类型...//匹配com.xyz.service包下任意接口所有方法 within(com.xyz.service.*) //匹配com.xyz.service包及其子包下任意所有方法 within...另一种编写方法是声明一个切入点,该切入点在匹配连接点时提供Account对象值,然后从通知中引用指定切入点

1.4K30

14. AOP配置管理

对于切入点表达式语法: 切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名./接口名.方法名(参数) 异常名) ‍ 对于这个格式,我们不需要硬记,通过一个例子,理解它: execution...,要想匹配需要在update接口和实现添加参数 execution(void com.*.*.*.*.update()) 返回void,com包下任意包三层包下任意update方法,匹配到是实现...匹配项目中任意包任意下只要以e结尾方法,update和save方法能满足,能匹配 execution(void com..*()) 返回void,com包下任意包任意任意方法,能匹配,*代表方法...将项目中所有业务层方法以save开头方法匹配 后面两种更符合我们平常切入点表达式编写规则 1.3 书写技巧 ‍ 对于切入点表达式编写其实是很灵活,那么在编写时候,有没有什么好技巧让我们用用...因为环绕通知是可以控制原始方法执行,所以我们把增强代码写在调用原始方法不同位置就可以实现不同通知类型功能,: ​ ​ ‍ 通知类型总结 知识点 1:@After 名称 @After 类型 方法注解

14110

总结切面编程AOP注解式开发和XML式开发

Spring框架AOP切面编程分为俩种:注解式开发和XML配置式开发。 项目结构图: ? AOP注解式开发:        首先我们使用注解式开发,最重要一点就是能够让这些注解生效,何为生效?...我这里扫描切面是由spring容器完成,因为我切面都在service层中了,所以我切面组件注解是由父容器spring配置文件扫描: ? 1、开启AOP注解解析器: 1 <!...: 方法返回值 完整包名.名.方法名(参数)。...注:如果方法返回值和参数类型不限则可以使用*代替,如果以什么什么开头方法也可以使用*代替,就如我们配置spring管理事务传播行为雷同。...-- 配置切入点: 7 AOP切入点表达式书写格式: 方法返回值 完整包名.名.方法名(参数)。 注:如果方法返回值和参数类型不限则可以使用*代替。

760100

【愚公系列】2023年04月 Java教学课程 133-Spring框架AOP

匹配com包下任意包中UserService或接口中所有名称为findById方法 +:专用于匹配子类类型 execution(* *.....如果原始方法返回类型void,通知方 也可以设定返回类型void,最终返回null 方法需在第一个参数位置设定ProceedingJoinPoint对象,通过该对象调用proceed()方法...配置切面@Aspect 定义专用切入点方法,并配置切入点@Pointcut 通知方法配置通知类型及对应切入点@Before 4.3 注解开发AOP注意事项 1.切入点最终体现为一个方法...void pt() { } 说明:被修饰方法忽略其业务功能,格式设定为无参无返回方法方法体内空实现(非抽象) 4.4.3 @Before 名称:@Before 类型注解 位置:方法定义上方...1.AOP使用XML配置情况下,通知执行顺序由配置顺序决定,在注解情况下由于不存在配置顺序概念概念,参照通知所配置方法名字符串对应编码值顺序,可以简单理解字母排序 同一个通知中,相同通知类型方法名排序为准

33510

SpringAOP

开头方法所有以Dao结尾接口中任意方法所有带有一个参数方法等 通知(Advice):在切入点处执行操作,也就是共性功能 在SpringAOP中,功能最终以方法形式呈现 通知:定义通知...; }; 相关属性:value(默认):切入点方法名,格式名.方法名( ) 后置通知 名称:@After 类型方法注解 位置:通知方法定义上方 作用:设置当前通知方法切入点之间绑定关系,当前通知方法在原始切入点方法后运行...,格式名.方法名( ) 环绕通知(重点) 名称:@Around 类型方法注解 位置:通知方法定义上方 作用:设置当前通知方法切入点之间绑定关系,当前通知方法在原始切入点方法前后运行 示例: @...,必须设定为Object类型 原始方法返回值如果是void类型,通知方法返回类型可以设置成void,也可以设置成Object 由于无法预知原始方法运行后是否会抛出异常,因此环绕通知方法必须抛出Throwable...("afterReturning advice"); }; 相关属性:value(默认):切入点方法名,格式名.方法名( ) 抛出异常后通知(了解) 名称:@AfterThrowing 类型方法注解

15810

AOP开发明确事项

AOP开发明确事项 12.2.1、需要编写内容 编写核心业务代码(目标目标方法编写切面,切面中有通知(增强功能方法) 在配置文件中,配置织入关系,即将哪些通知与哪些连接点进行结合...test1(){ target.method(); } } 12.2.5.2 切点表达式写法 表达式语法: execution([修饰符] 返回类型 包名.名.方法名(参数))...访问修饰符可以省略 返回类型、包名、名、方法名可以使用星号* 代表任意 包名与名之间一个点 ....//具体所有方法都会被增强,无返回值 execution(* com.itheima.aop.*.*(..))....名.方法名(参数)) 12.2.6、基于注解AOP开发 12.2.6.1 快速入门 基于注解aop开发步骤: ①创建目标接口和目标(内部有切点) ②创建切面(内部有增强方法) ③将目标和切面对象创建权交给

16730

SSH框架之Spring第三篇

Introduction(引介) : 是一种特殊通知在不修改代码前提下,Introduction可以在运行期动态地添加一些方法或Field....返回类型 包名.名.方法名(参数)) 写法说明: 全匹配方式: public void com.baidu.service.impl.CustomerServiceImpl.saveCustomer...() 访问修饰符可以省略 void com.baidu.service.impl.CustomerServiceImpl.saveCustomer() 返回值可以使用*号,表示任意返回值...AOP配置文件开发步骤 : 1 : 导入jar包 2 : 编写切面,编写通知方法(自己来编写) 3 : 配置切面,进行IOC管理 4 : 编写AOP增强....= 切入点表达式 + 通知类型 public class MyAnnoAspect { /** * 通知方法 * 配置通知类型注解属性编写切入点表达式

31930

Spring学习笔记 AOP

所有的AOP相关配置,都只能编写在节点中,而且顺序必须按照切入点、通知和切面的顺序声明。...args,匹配方法参数是指定类型连接点。 @target,匹配目标对象被指定注解标记连接点。 @args,匹配方法参数标记有指定注解连接点。...在指示符后面,需要一组括号,括号内容是方法匹配,语法如下: 指示符(返回类型 包名.名.方法名(参数列表) ) 下面这个切入点表示是当yitian.learn.aop.MyService返回任意值任意名称和任意个参数方法执行时....*) 匹配以set开头所有方法执行。 execution(* set*(..)) 匹配com.xyz.service包下任意任意方法。...这里这个方法作用就是充当一个占位符,所以方法空,这个方法返回类型必须是void

41320

Spring5参考指南:AspectJ注解

在aop@Aspectj注解样式中,通过常规方法定义提供切入点签名,并使用@Pointcut注解指示切入点表达式(作为切入点签名方法必须具有void返回类型)。...target:目标对象(要代理应用程序对象)是给定类型实例。 args:参数是给定类型实例。 @target:执行对象具有给定类型注解。...除返回类型模式(前面代码段中ret-type-pattern)、名称模式和参数模式之外所有部分都是可选返回类型模式确定方法返回类型,以便匹配连接点。*最常用作返回类型模式。...其次,它通过account参数使实际account对象可用于advice。 另一种编写方法是声明一个切入点,该切入点在与连接点匹配时“提供”account对象值,然后从通知中引用命名切入点。...例如,给定一个名为UsageTracked接口和一个名为DefaultUsageTracked接口实现,下面的方面声明com.flydean.service所有方法也实现UsageTracked

1.1K30

【SSM】学习笔记(一)—— Spring入门

中,一个切入点可以只描述一个具体方法,也可以匹配多个方法 一个具体方法:com.itheima.dao包下BookDao接口无形参无返回save方法 匹配多个方法所有的save方法所有的get...开头方法所有Dao结尾接口任意方法所有带有一个参数方法 通知(Advice):在切入点处执行操作,也就是共性功能 在SpringAOP中,功能最终以方法形式呈现 通知:定义通知...书写技巧 所有代码按照标准规范开发,否则以下技巧全部失效 描述切入点通常描述接口,而不描述实现 访问控制修饰符针对接口开发均采用public描述(可省略访问控制修饰符描述) 返回类型对于增删改查使用精准类型加速匹配...,必须设定Object类型 原始方法返回值如果是void类型,通知方法返回类型可以设置成void,也可以设置成Object 由于无法预知原始方法运行后是否会抛出异常,因此通知方法必须抛出Throwable...:获取切入点方法返回值,但方法使用是前置通知,没有返回值,就不能获取。

33630

SSM第三讲 SpringAOP开发

h) 作用:生成一个代理对象 loader 和目标对象一加载器 interfaces 真实对象所有实现接口 h 是一个接口,传一个匿名内部类做为实现,并且重写其中方法来实现代理功能 返回值...method 代理方法对象 args 调用方法时传递参数数组 返回 返回当前这个方法调用返回值 动态代理模式开发步骤 首先需要存在抽象角色,定义所有的功能 真实对象实现抽象角色所有的功能 通过...:UserService中save()方法就是连接点 Pointcut(切入点): 切入点,就是拦截方法设置规则,连接点一系列集合 所谓切入点是指我们要对哪些Joinpoint进行拦截定义...切入点表达式说明 3.2.1 execution 匹配方法执行(常用) execution(表达式)表达式语法: execution([修饰符] 返回类型 包名.名.方法名(参数)) 全匹配方式:...常用注解 @Aspect 作用:把当前声明为切面。 @Before 作用:把当前方法看成是前置通知。 属性: value:用于指定切入点表达式,还可以指定切入点表达式引用。

61620

揭秘AOP:切面编程综合指南

项目中考虑下面的项目结构: 使用AOP创建一个独立aspect包,包下继续创建一个切面MyAspect,用来编写切面编程核心逻辑;注意不要忘了给该类加上@Component和Aspect注解;...第一个 * 表示匹配任意返回类型方法。 cn.ilikexff.springaop.service.* : 表示匹配该包名下任意。 第三个 * 表示匹配任意方法。...因此,这个切点表达式会匹配 cn.ilikexff.springaop.service 包下所有所有方法,无论返回类型和参数如何都将被该切面关注到; 通过切点表达式指定了需要切面关注方法之后,......."); Target(目标对象):被增强对象就是目标对象; 比如上面案例中增强Service包下所有对象就是目标对象; Aspect(切面):切入点+通知结合,每一个切入点和对应增强逻辑组成一块切面...匹配指定包下返回类型String方法: - `execution(String com.example.service.*.*(..))` 1.4 切点函数 @annotation 是Spring

26920

Spring:AOP 面向切面编程

来处理,从而实现方法增强 CGLIB 代理,基于父动态代理技术 - 动态生成一个要代理子类,子类重写要代理所有不是 final 方法;在子类中采用方法拦截技术拦截所有的父方法调用,顺势织入横切逻辑...表示任意个数,任意类型参数列表 例子: - execution([修饰符] 返回类型 包名.名.方法名(参数)) execution(public void com.renda.service.impl.AccountServiceImpl.transfer...)) - 返回类型、包名、名、方法名可以使用星号 * 代替,代表任意 execution(* *.*.*.*.*.*()) - 包名与名之间一个点 ....:config> * 通知类型 前置通知、后置通知、异常通知、最终通知 环绕通知 * 切点表达式 execution([修饰符] 返回类型 包名.名.方法名(参数))...public class MyAdvice { ... } 在通知中使用注解配置织入关系,升级切面 @Component @Aspect // 升级切面:配置切入点和通知关系 public

1.2K40

【Spring进阶】基于注解面向切面编程(AOP)详解

介绍Spring中基于注解AOP配置方法 基于注解AOP配置主要涉及以下几个注解: @Aspect:用于声明一个切面。 @Component:将切面作为Spring管理组件。...// 执行返回通知逻辑 } AOP高级特性 AOP(面向切面编程)高级特性包括对切入点表达式灵活使用,以及在复杂应用场景中应用AOP,性能监控、日志记录、事务管理等。...Spring AOP支持多种切入点表达式,包括: execution:基于方法执行进行匹配,execution(* com.example.service.*.*(..))。...within:基于结构进行匹配,within(com.example.service.*)。 this:匹配特定类型代理对象,this(com.example.Auditable)。...target:匹配目标对象类型target(com.example.Auditable)。 args:匹配方法参数类型args(java.lang.String)。

70920

Spring基础——了解这么多就够了!

包下 BookDao 接口中无形参返回 save 方法匹配多个方法所有的 save 方法所有的 get 开头方法所有以 Dao 结尾接口中任意方法所有带一个参数方法通知:在切入点处执行操作...,com包下任意包三层包下任意update方法,匹配到是实现,能匹配execution(void com.*.*.*.update())返回void,com包下任意两层包下任意update...方法,匹配到是接口,能匹配execution(void *..update())返回void方法名是update任意包下任意,能匹配execution(* *..*(..))匹配项目中任意任意方法...*e(..))匹配项目中任意包任意下只要以e结尾方法,update和save方法能满足,能匹配execution(void com..*())返回void,com包下任意包任意任意方法,能匹配...*Service.save*(..))将项目中所有业务层方法以save开头方法匹配书写技巧:所有代码按照标准规范开发,否则以下技巧全部失效描述切入点通常描述接口,而不描述实现,如果描述到实现,就出现紧耦合了访问控制修饰符针对接口开发均采用

21700

嘎嘎基础JavaWeb(下)

:前置通知,此注解标注通知方法在目标方法前被执行@After:后置通知,此注解标注通知方法在目标方法后被执行,无论是否有异常都会被执行@AfterReturning:返回后通知,此注解标注通知方法在目标方法后被执行...:execution ( ... ... ):根据方法签名来匹配@annotation( ... ... ):根据注解匹配切入点表达式——executionexecution 主要根据方法返回值、包名...、名、方法名、方法参数 等信息来匹配,语法:execution(访问修饰符?...,可以统配任意返回值 、包名、名、方法名、任意类型一个参数,也可以通配包、方法一部分execution(* com.*.service.*.update*(*)). ....:查询方法都是 find 开头,更新方法都是 update 开头描述切入点方法通常 基于接口描述 ,而不是直接描述实现, 增强拓展性 在满足业务需要前提下, 尽量缩小切入点匹配范围 。

13100

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券