初步学习Spring Aop使用之注解方式(示例代码)

栏目: java · 发布时间: 2021-01-25

来源:cnblogs.com

简介  这篇文章主要介绍了初步学习Spring Aop使用之注解方式(示例代码)以及相关的经验技巧,文章约5362字,浏览量271,点赞数6,值得参考!

前言:

这里就主要演示Spring中Aop使用注解是怎么使用,如果需要了解更多Aop相关概念,可查看相关资料的介绍

一、项目目录  【标记文件为主要文件】

技术分享图片

二、各个文件的代码

AopServer.java  【编写切点的文件,就是一些需要被修饰的业务处理】

package aop;

import org.springframework.stereotype.Service;

@Service
public class AopServer {
    
    public void add() {
        System.out.println("旧版本添加业务处理");
    }
}

AspectClass.java  【切面文件,定义一些前置后置环绕接口】

package aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
 * @author Luck
 * Aop 插入示例
 */
@Component // 告知Spring容器这是有个Bean对象
@Aspect  // 声明这是一个切面
public class AspectClass {
 
 // 定义切点
 @Pointcut("execution(* aop.AopServer.*(..))")
 public void pointCut() {}
 
 
 @Before("pointCut()") // 可使用复用的切点
 public void start() {
  System.out.println("前面插入方法");
 }
 
 
 @After("execution(* aop.AopServer.*(..))") // 可使用自己定义的规则切点
 public void end() {
  System.out.println("后面插入方法");
 }
 
 @Around("pointCut()")
 public void around(ProceedingJoinPoint joinPoint) throws Throwable {
  System.out.println("环绕插入前。。。。。。。。。。");
  joinPoint.proceed();
  System.out.println("环绕插入后。。。。。。。。。。");
 }
}

AopApplication.java   【测试入口,也是Spring Boot的入口】

package aop;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Configuration
@Controller
@SpringBootApplication
@ComponentScan(basePackages="aop")
public class AopApplication {
    
    @Autowired
    public AopServer sopServer;
    
    @RequestMapping(value="/aopDemo")
    @ResponseBody
    public String aopDemo() {
        sopServer.add();
        return "success";
    }
    
    
    public static void main(String[] args) {
        SpringApplication.run(AopApplication.class);
    }

}

通过url访问控制台打印结果如下:

技术分享图片

 

三、当一个连接点被一个切面的多个注解混合配置时Aop执行顺序如下:

没有出现异常情况

技术分享图片

出现异常情况:

技术分享图片

四、当一个连接点被多个切面的多个注解混合配置时Aop执行顺序是不确认的。如果需要确认执行顺序,可通过在Aspect的类上面使用@Order(value)注解来确定多个Aspect的顺序,Order里面的value越小优先级越高

 





































以上就是本文的全部内容,希望对大家的学习有所帮助,版权归原作者或者来源机构所有,感谢作者,如果未能解决你的问题,请参考以下文章。

Spring系列之AOP实现的两种方式

SPRING学习(十九)--基于注解的AOP切面编程

SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP(示例代码)

Spring框架的IOC之注解方式的快速入门

spring学习 注解AOP 通知传递参数(示例代码)