当前位置:首页 >> 核电技术聚变聚能设备 >> 【Spring】使用xml配置AOP,ssav

【Spring】使用xml配置AOP,ssav

cpugpu芯片开发光刻机 核电技术聚变聚能设备 1
文件名:【Spring】使用xml配置AOP,ssav 【Spring】使用xml配置AOP

文章目录 1.前言2.xml配置AOP3. 总结

1.前言

在之前的学习中,都是使用注解的方式进行AOP的配置.其实使用xml配置文件也可以配置AOP.

2.xml配置AOP

xml配置AOP方法如下:

添加相关依赖

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.29</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version></dependency></dependencies>

相关bean放到Spring容器中

@Servicepublic class StudentService {public void insert(){System.out.println("StudentService中的insert方法");}}

创建切面类注入到Spring中,我这里使用的是@Component注解,也可以在配置文件中使用Bean标签

@Componentpublic class Aspect {@Pointcut("execution(* com.example.service..*.*(..)")public void pt(){System.out.println("");}public void methodBefore(JoinPoint joinPoint){Object[] args = joinPoint.getArgs();Object target = joinPoint.getTarget();MethodSignature signature = (MethodSignature) joinPoint.getSignature();System.out.println("Before");}}

在配置文件中开启组件扫描(因为我在将相应的Bean注入到Spring中时,使用的是注解,如果使用Bean标签,这一步可以省略)

<context:component-scan base-package="com.example"></context:component-scan>

在配置文件中配置AOP,将切面类(StudentService)中的methodBefore方法设置为前置通知

<aop:config><!--定义切面--><aop:pointcut id="pt" expression="execution(* com.example.service..*.*(..))"/><!--配置切面--><aop:aspect ref="aspect"><!--配置通知类型--><!-- <aop:before method="methodBefore" pointcut-ref="pt"/> --><aop:before method="methodBefore" pointcut="com.example.aspect.Aspect.pt()"/></aop:aspect></aop:config>

配置通知类型中有两种写法,一种是用pointcut-ref属性,值是定义切面时的id,另一种是使用pointcut属性,需要指定切点方法的全类名

运行结果: 可以看到成功将StudentService中的methodBefore方法设置为前置通知了

接下来讲一下复杂的通知如何配置,如下:

@AfterReturning(value = "point()",returning = "ret")public void methodAfterReturning(JoinPoint joinPoint, Object ret){// 方法体}@AfterThrowing(value = "point()",throwing = "e")public void methodAfterThrowing(JoinPoint joinPoint,Throwable e){// 方法体}

@AfterReturning和@AfterThrowing是有两个参数的

以@AfterReturning为例,在切面类中添加对应的普通方法:

@Componentpublic class Aspect {@Pointcut("execution(* com.example.service..*.*(..))")public void pt(){System.out.println("");}public void methodBefore(JoinPoint joinPoint){Object[] args = joinPoint.getArgs();Object target = joinPoint.getTarget();MethodSignature signature = (MethodSignature) joinPoint.getSignature();System.out.println("Before");} public void methodAfterReturning(JoinPoint joinPoint, Object ret){System.out.println("AfterReturning: "+ ret);}} <aop:aspect ref="aspect"><!--配置通知类型--><!-- <aop:before method="methodBefore" pointcut-ref="pt"/> --><aop:before method="methodBefore" pointcut="com.example.aspect.Aspect.pt()"/><aop:after-returning method="methodAfterReturning" pointcut-ref="pt" returning="ret"/></aop:aspect>

需要注意在设置AOP时,标签中有returning这样一个属性

运行结果:

3. 总结

xml配置AOP的重要步骤:

定义切面类,定义切点.将目标类和切面类添加到Spring容器中(注解或Bean标签),如果是注解方式,需要添加组件扫描在配置文件中配置AOP

在实际开发中,用注解配置AOP比较多,xml配置AOP了解即可

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接