java 切面顺序_spring 多个切面如何有序执行
Spring也能支持多个切面。当有多个切面时,它不会存在任何顺序,这些顺序代码会随机生成,但是有时候我们希望它按照指定的顺序运行。
在此之前要先定义一个切点方法,为此新建一个接口——MultiBean
代码清单:定义多个切面的切点方法
packagecom.ssm.chapter11.multi.bean;public interfaceMultiBean {public voidtestMulti();
}
代码清单:实现MultiBean接口
packagecom.ssm.chapter11.multi.bean.impl;importcom.ssm.chapter11.multi.bean.MultiBean;importorg.springframework.stereotype.Component;/****************imports****************/@Componentpublic class MultiBeanImpl implementsMultiBean {//@Override
public voidtestMulti() {
System.out.println("test multi aspects!!");
}
}
代码清单:3个切面
packagecom.ssm.chapter11.multi.aspect;import org.aspectj.lang.annotation.*;importorg.springframework.core.Ordered;importorg.springframework.core.annotation.Order;/**************** imports ****************/@Aspect//@Order(1)
public class Aspect1 implementsOrdered {//@Override
public intgetOrder() {return 1;
}
@Pointcut("execution(* com.ssm.chapter11.multi.bean.impl.MultiBeanImpl.testMulti(..))")public voidprint() {
}
@Before("print()")public voidbefore() {
System.out.println("before 1 ......");
}
@After("print()")public voidafter() {
System.out.println("after 1 ......");
}
@AfterThrowing("print()")public voidafterThrowing() {
System.out.println("afterThrowing 1 ......");
}
@AfterReturning("print()")public voidafterReturning() {
System.out.println("afterReturning 1 ......");
}
}
packagecom.ssm.chapter11.multi.aspect;import org.aspectj.lang.annotation.*;importorg.springframework.core.annotation.Order;/**************** imports ****************/@Aspect
@Order(2)public classAspect2 {
@Pointcut("execution(* com.ssm.chapter11.multi.bean.impl.MultiBeanImpl.testMulti(..))")public voidprint() {
}
@Before("print()")public voidbefore() {
System.out.println("before 2 ......");
}
@After("print()")public voidafter() {
System.out.println("after 2 ......");
}
@AfterThrowing("print()")public voidafterThrowing() {
System.out.println("afterThrowing 2 ......");
}
@AfterReturning("print()")public voidafterReturning() {
System.out.println("afterReturning 2 ......");
}
}
packagecom.ssm.chapter11.multi.aspect;import org.aspectj.lang.annotation.*;importorg.springframework.core.annotation.Order;/**************** imports ****************/@Aspect
@Order(3)public classAspect3 {
@Pointcut("execution(* com.ssm.chapter11.multi.bean.impl.MultiBeanImpl.testMulti(..))")public voidprint() {
}
@Before("print()")public voidbefore() {
System.out.println("before 3 ......");
}
@After("print()")public voidafter() {
System.out.println("after 3 ......");
}
@AfterThrowing("print()")public voidafterThrowing() {
System.out.println("afterThrowing 3 ......");
}
@AfterReturning("print()")public voidafterReturning() {
System.out.println("afterReturning 3 ......");
}
}
代码清单:多切面测试Java配置
packagecom.ssm.chapter11.multi.config;importcom.ssm.chapter11.multi.aspect.Aspect1;importcom.ssm.chapter11.multi.aspect.Aspect2;importcom.ssm.chapter11.multi.aspect.Aspect3;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.EnableAspectJAutoProxy;/****************imports****************/@Configuration
@EnableAspectJAutoProxy
@ComponentScan("com.ssm.chapter11.multi")public classMultiConfig {
@BeanpublicAspect1 getAspect1() {return newAspect1();
}
@BeanpublicAspect2 getAspect2() {return newAspect2();
}
@BeanpublicAspect3 getAspect3() {return newAspect3();
}
}
代码清单:测试
public static voidmain(String[] args) {
ApplicationContext ctx= new AnnotationConfigApplicationContext(MultiConfig.class);
MultiBean multiBeanService= ctx.getBean(MultiBean.class);
multiBeanService.testMulti();
}
如何让它有序执行:
1.@Order(1),@Order(2),@Order(3) 注解
2.实现 implements Ordered
3.
java 切面顺序_spring 多个切面如何有序执行相关推荐
- Java切面理解_Spring AOP面向切面编程:理解篇
package com.vx.servicehi.annotation; import java.lang.annotation.Annotation; import java.lang.reflec ...
- Java绝地求生—Spring AOP面向切面编程
Java绝地求生-Spring AOP面向切面编程 背景 动态代理 构建被代理对象 自动生成代理 调用动态代理 Spring方法 方式一:使用Spring的API接口 方式二:使用自定义类 方式三:使 ...
- 什么是 Java 中的 AOP(面向切面编程)?如何使用它来实现横切关注点?
AOP(Aspect-oriented programming,面向切面编程),是一种编程思想和技术,旨在将横切关注点和主业务逻辑分离,使得系统更容易扩展和维护.在 Java 中,AOP 主要通过代理 ...
- springboot异步和切面_spring中的切面和异步执行
1.首先理解异步和多线程的概念,怎么实现接口的异步调用呢?多线程,这是很多人第一眼想到的关键词,没错,多线程就是一种实现异步调用的方式! 2.下面介绍怎么实现异步调用方式 3.首先如果你的项目是spr ...
- Java 初始化顺序
无继承关系的初始化顺序 class Sample {Sample(String s){System.out.println(s);}Sample(){System.out.println(" ...
- java 继承类 变量、静态变量、构造函数执行顺序
java 继承类 变量.静态变量.构造函数执行顺序 Java代码 class C{ static int prt(int i){ System.out.println(i); return i; ...
- java实现顺序栈_Java实现顺序栈原理解析
这篇文章主要介绍了java实现顺序栈原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 什么是栈 1.栈的英文是stack 2.栈是一个先入后出 ...
- java io顺序_Java顺序IO性能
java io顺序 许多应用程序将一系列事件记录到基于文件的存储中,以供以后使用. 从日志记录和审核,直到在事件源设计或其紧密相关的CQRS中保留事务重做日志,这都可以是任何东西. Java具有多种方 ...
- java foreach顺序_Java中的LongStream forEachOrdered()方法
forEachOrdered()Java中的方法对此流的每个元素执行一个操作,以确保对具有定义的遇到顺序的流按遇到顺序处理每个元素. 语法如下-void forEachOrdered(LongCons ...
最新文章
- HDU 2094 产生冠军
- 笔记-项目范围管理-项目范围管理计划和需求管理计划
- es if语法 script_熬夜7天,我总结了JavaScript与ES的25个重要知识点!
- 使用 dotnet-monitor 分析.NET 应用程序
- ant vue 语言_Ant Design Vue是什么
- 老外写的关于协程的性能文章-主打http协议
- 使用Jenkins搭建持续集成环境的方法(二)
- 比long 大的数用__int64 输出符%I64d
- Motorola WLAN之无线漫游
- docker学习--数据卷
- 极光推送的简单实现方法
- java中ajax是什么意思,java中使用Ajax技术
- STL源码剖析(四):容器(6)Rb_tree
- 用于信号处理的Xilinx FPGA XC7K325T PCIeX8 FMC处理板卡
- 电脑如何设置开机密码?详细教程来了
- Google benchmark使用手册及范例
- 数据告诉你哪里才是中国最热的火炉城市?
- 精准发力补短板,产教融合发展论坛为“稳就业”赋能!
- ts 的class和interface的区别
- 2022年第三届“大湾区杯”粤港澳金融数学数学建模竞赛