博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初步学习Spring Aop使用之注解方式
阅读量:6842 次
发布时间:2019-06-26

本文共 2419 字,大约阅读时间需要 8 分钟。

前言:

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

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

二、各个文件的代码

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

package aop;import org.springframework.stereotype.Service;@Servicepublic 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越小优先级越高

 

转载于:https://www.cnblogs.com/cairiqiang/p/10085653.html

你可能感兴趣的文章
[C++] Realloc Memory
查看>>
Linux命令——su 、su -、sudo
查看>>
maven:读取程序版本号的三种方案
查看>>
iOS开发UI篇—CAlayer(自定义layer)
查看>>
Dsyy的第一篇博文~
查看>>
HTTP 响应头信息
查看>>
centos7安装docker
查看>>
Cocos2d-JS v3.0 alpha 导入 cocostudio的ui配置
查看>>
c# out ref 引用传递,借用变量返回多个值
查看>>
System.net.mail 使用ssl发送邮件失败
查看>>
eclipse无法创建Server
查看>>
【issue】支付宝SDK集成:openssl/asn1.h file not found
查看>>
mysql5.7 编码统一utf-8
查看>>
window设置TortoiseGit连接git不用每次输入用户名和密码
查看>>
git 多仓库源 配置
查看>>
子类如何调用被子类override了的方法?
查看>>
浅析WINFORM工具条的重用实现
查看>>
第二周学习总结
查看>>
JavaScript setInterval()執行clearInterval() 再恢復setInterval()
查看>>
SpringMVC工作原理
查看>>