Python 官方文档:入门教程 => 点击学习
目录AspectJ简介什么是AspectJ实现aop的方式原生使用切面通过注解使用切面AspectJ简介 它不属于spring;AspectJ是一个AOP的框架;定义了AOP语法;有
Spring AOP 回顾
添加AOP坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
创建增强类MyAOP
对service层下的所有类的所有方法进行增强
@Component
@Aspect
public class MyAOP {
//定义切点
@Pointcut("execution(* com.moming.service.*.*(..))")
public void point(){}
@Before("point()")
public void before(){
System.out.println("===>前置通知");
}
@After("point()")
public void after(){
System.out.println("===>后置通知");
}
@Around("point()")
public Object arround(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("===>环绕前");
Object resules = pjp.proceed();
System.out.println("===>环绕后");
return resules;
}
@AfterReturning(value = "point()",returning = "ret")
public void returning(JoinPoint jp, String ret){
Object[] args = jp.getArgs();
System.out.println("返回后通知获取参数: "+Arrays.toString(args));
System.out.println("===>返回后通知,返回值: "+ret);
}
@AfterThrowing("point()")
public void throwing(){
System.out.println("===>异常通知");
}
}
service/OrderService
@Service
public class OrderService {
public String order(int id){
System.out.println("===>目标方法:订单业务ID:"+id);
return "001202210121010";
}
}
启动类测试
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App2.class, args);
OrderService bean = context.getBean(OrderService.class);
System.out.println(bean.order(1));
}
}
无异常时
有异常时,后续代码就不再执行了
补充配置说明
//两种占位符
//* 代表的是一个单词,b* 代表的是以b开头的单词。 例如 bds
//.. 通配符 ,代表的是0个或者多个匹配项
声明注解NeedCut
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface NeedCut {
}
切换注解
@Component
@Aspect
public class MyAOP {
//定义切点
@Pointcut("@annotation(com.moming.annotation.NeedCut)")
public void point(){}
@Before("point()")
public void before(){
System.out.println("===>前置通知");
}
@After("point()")
public void after(){
System.out.println("===>后置通知");
}
@Around("point()")
public Object arround(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("===>环绕前");
Object resules = pjp.proceed();
System.out.println("===>环绕后");
return resules;
}
@AfterReturning(value = "point()",returning = "ret")
public void returning(JoinPoint jp, String ret){
Object[] args = jp.getArgs();
System.out.println("返回后通知获取参数: "+Arrays.toString(args));
System.out.println("===>返回后通知,返回值: "+ret);
}
@AfterThrowing("point()")
public void throwing(){
System.out.println("===>异常通知");
}
}
使用注解@NeedCut
@Service
public class OrderService {
@NeedCut
public String order(int id){
System.out.println("===>目标方法:订单业务ID:"+id);
return "001202210121010";
}
public void add(){
System.out.println("===>添加订单");
}
}
测试
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App2.class, args);
OrderService bean = context.getBean(OrderService.class);
System.out.println(bean.order(01));
System.out.println("-------------------");
bean.add();
}
}
使用@NeedCut注解的方法才进行增强
到此这篇关于SpringBoot AOP AspectJ切面技术介绍与实现方式的文章就介绍到这了,更多相关SpringBoot AOP AspectJ切面内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: SpringBootAOPAspectJ切面技术介绍与实现方式
本文链接: https://www.lsjlt.com/news/170171.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0