1、引入依赖

    <!--spring aop依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>6.0.2</version>
</dependency>
<!--spring aspects依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>6.0.2</version>
</dependency>

2、定义接口和实现类

public interface Calculator {
int add(int a,int b);
int sub(int a,int b);
int mul(int a,int b);
int div(int a,int b);
}
public class CalculatorImpl implements Calculator{
@Override
public int add(int a, int b) {
int res = a+b;
System.out.println("res:"+res);
return res;
} @Override
public int sub(int a, int b) {
int res = a-b;
System.out.println("res:"+res);
return res;
} @Override
public int mul(int a, int b) {
int res = a*b;
System.out.println("res:"+res);
return res;
} @Override
public int div(int a, int b) {
int res = a/b;
System.out.println("res:"+res);
return res;
}
}

3、配置类

@Configuration
@ComponentScan(value = "com.jixian")
@EnableAspectJAutoProxy
public class SpringConfig {
}

4、切面类

@Aspect
@Component
public class AspectLog { @Before(value = "execution(public int com.jixian.CalculatorImpl.*(..))")
public void beforeMethod(){
System.out.println("前置通知...");
}
@After(value = "execution(* com.jixian.CalculatorImpl.*(..))")
public void afterMethod(){
System.out.println("后置通知...");
}
@AfterReturning(value = "execution(* com.jixian.CalculatorImpl.*(..))")
public void afterReturn(){
System.out.println("返回通知...");
}
@AfterThrowing(value = "execution(* com.jixian.CalculatorImpl.*(..))")
public void throwMethod(){
System.out.println("异常通知...");
}
@Around(value = "execution(* com.jixian.CalculatorImpl.*(..))")
public Object aroundMethod(ProceedingJoinPoint joinPoint){
Object o = null;
try {
System.out.println("环绕通知...方法执行前");
o = joinPoint.proceed();
System.out.println("环绕通知...返回值后");
} catch (Throwable throwable) {
throwable.printStackTrace();
System.out.println("环绕通知...出现异常");
} finally {
System.out.println("环绕通知...方法执行后");
}
return o;
}
}

5、测试

        ApplicationContext context = new AnnotationConfigApplicationContext("com.jixian");
Calculator calculator = context.getBean(Calculator.class);
calculator.div(12,1);

基于注解的AOP的更多相关文章

  1. Spring_Spring与AOP_AspectJ基于注解的AOP实现

    一.AspectJ.Spring与AOP的关系 AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Cl ...

  2. Spring基础知识之基于注解的AOP

    背景概念: 1)横切关注点:散布在应用中多处的功能称为横切关注点 2)通知(Advice):切面完成的工作.通知定了了切面是什么及何时调用. 5中可以应用的通知: 前置通知(Before):在目标方法 ...

  3. spring中基于注解使用AOP

    本文内容:spring中如何使用注解实现面向切面编程,以及如何使用自定义注解. 一个场景 比如用户登录,每个请求发起之前都会判断用户是否登录,如果每个请求都去判断一次,那就重复地做了很多事情,只要是有 ...

  4. AspectJ框架基于注解的AOP实现

    AspectJ的AOP实现:有两种方式,一种是基于XML配置文件,一种是基于注解的,由于注解更为常用,这里 这里只针对注解来学习. ---------------------------------- ...

  5. 阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

    复制依赖和改jar包方式 src下的都复制过来. 复制到新项目里了 bean.xml里面复制上面一行代码到下面.把aop改成context. 配置spring容器创建时要扫描的包 Service的配置 ...

  6. springboot自定义jdbc操作库+基于注解切点AOP

    发布时间:2018-11-08   技术:springboot+aop   概述 springBoot集成了自定义的jdbc操作类及AOP,因为spring自带的JdbcTemplate在实际项目中并 ...

  7. Spring AspectJ基于注解的AOP实现

    对于AOP这种编程思想,很多框架都进行了实现.Spring就是其中之一,可以完成面向切面编程.然而,AspectJ也实现了AOP的功能,且实现方式更为简捷,使用更加方便,而且还支持注解式开发.所以,S ...

  8. Spring 基于注解的AOP实现

    在本文开始之前,我要引入一张图,这张图的来源 https://blog.csdn.net/chenyao1994/article/details/79708496 ,版权归原作者所有,我借鉴了原作者的 ...

  9. 基于注解的AOP配置

    配置文件 spring配置文件中的约束 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ...

  10. 阶段3 2.Spring_10.Spring中事务控制_2 作业-基于注解的AOP实现事务控制及问题分析_上

    创建maven的新项目 先复制坐标的依赖. 再把代码复制进来 先改造ioc的部分 复制上面一行代码.到下面 改成context 这里也是复制的上面两行代码.到下面改成context关键字 配置扫描的包 ...

随机推荐

  1. 如何将 Autofac 整合进 Net6.0 Core MVC 项目中

    一.前言 1.前言 Asp.Net Core Mvc,我也用了很长一段时间了,它现在的编程模型和方式还是特别棒的,都是组件开发,什么都可以替换,当然了,您别抬杠,有些还是不能替换的.自从我们进入了跨平 ...

  2. 3D场景建模零代码平台

    3D场景建模软件(零基础.零代码.**),是指用来制作场景的软件,分为2D建模和3D建模,二者使用的技术及原理不同. 2D软件:它是用3维几何图形绘制出三维图形的软件,其主要功能是利用软件中已经画好的 ...

  3. wsl安装和使用

    1.安装wsl的版本 1.使用管理员身份打开powershell,执行 wsl --list --online 2.安装相应的版本 wsl --install -d Ubuntu-20.04 2.更改 ...

  4. 下拉刷新,上拉触底(.js里自带)

    <view>content值是{{cont}}</view> <button bindtap="add">+1</button>   ...

  5. VMware 关于mininet

    1.mininet安装是git clone git://github.com/mininet/mininet.git       (git clone http://github.com/minine ...

  6. DRF过滤Filtering

    过滤Filtering 对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-filter扩展来增强支持. pip install django-filter 在配置文件中增加过滤后端的 ...

  7. [Unity]利用Mesh绘制简单的可被遮挡,可以探测的攻击指示器

    最近做一个小游戏的Demo,最终的效果是这样的 主要是利用Mesh绘制三角形作为显示,然后使用后处理来制作探灯,注意,性能一般,仅仅适合小游戏 分为3步 1:利用mesh绘制三角形,原理很简单,利用三 ...

  8. VUE学习-表单输入绑定

    表单输入绑定 v-model 可以用 v-model 指令在表单 <input>.<textarea> 及 <select> 元素上创建双向数据绑定. v-mode ...

  9. 代码随想录训练营day 3|59.螺旋矩阵II 加 数组总结篇

    59.螺旋矩阵II 题目链接:59.螺旋矩阵II 题目描述:给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1 ...

  10. docker搭建图片压测QPS3000+服务器(ftp+nginx)

    docker搭建图片压测QPS3000+服务器(ftp+nginx) 在针对图片算法服务进行压力测试时,需要高性能的图片服务器 自己编写的图片应用性能不一定能达到要求 可能因为图片应用自身达不到压测要 ...