一、AOP简介

AOP(Aspect Oriented Programming)面向切面编程,是一种编程范式,指导开发者如何组织程序结构

作用:在不惊动原始设计的基础上为其进行功能增强

Spring理念:无侵入式/无入侵式

二、AOP核心概念

1.连接点(JointPoint):程序执行过程中的任意位置,在SpringAOP中,理解为方法的执行,也就是说,一个方法就是一个连接点

2.切入点(PointCut):匹配连接点的式子,在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法

  • 一个具体方法:com包下的Dao接口中的save方法
  • 多个方法:所有的save方法,所有g开头的方法,所有以Dao结尾的接口中的任意方法等等...

3.通知(Advice):在切入点处执行的操作,也就是共性功能,在SpringAOP中,功能最终以方法的形式呈现

4.通知类:定义通知的类

5.切面(Aspect):描述通知与切入点的对应关系

三、入门步骤

1.在pom.xml文件导入aop依赖坐标

<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.4</version>
</dependency>

2.定义dao接口与实现类

public interface BookDao {void save();void update();
}
@Component("bookDao")
@Repositorypublic class BookDaoImpl implements BookDao {public void save() {System.out.println(System.currentTimeMillis());System.out.println("book dao save...");}public void update() {System.out.println("book dao update...");}
}

3.定义通知类,制作通知(注:method就是通知类,是共性方法)

@Component
public class MyAdvice {//通知,共性方法public void method(){System.out.println(System.currentTimeMillis());}
}

4.定义切入点(在通知类里,pt就是切入点,配了BookDao类下的update方法)

@Component
public class MyAdvice {@Pointcut("execution(void com.dao.BookDao.update())")private void pt(){}}

5.绑定切入点与通知的关系,并指定通知添加到原始连接点的具体执行位置  @Before("pt()")

6.定义通知类受Spring容器管理,并定义当前类为切面类  @Aspect

7.开启Spring对AOP注解驱动支持    @EnableAspectJAutoProxy

8.最后写一个测试类测试一下:

public class App {public static void main(String[] args) {ApplicationContext ctx=new AnnotationConfigApplicationContext(SpringConfig.class);BookDao bookDao = ctx.getBean(BookDao.class);bookDao.save();//这一行的方法可以把Dao里的方法都测试一下,看哪些绑定了通知,哪些没有绑定}
}

这里的save方法已经执行了第2个步骤里的自带的方法,也就是输出当时时间,而换成bookDao.update()可不可以也输出时间呢,这在2里的update方法里可没有写哦~

运行结果必然是可以的,因为在第5个步骤已经把update方法与共性方法也就是通知绑定在一起了,所以最后也能运行出来通知里的内容。

四、最后总结一下,把代码和核心概念对应起来:

1.连接点(JointPoint):在SpringAOP中,理解为方法的执行,第2步里的save方法和update方法就是两个连接点

2.切入点(PointCut):在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法,第4步里的PointCut就是匹配了一个具体方法,BookDao接口下的update方法

  • 一个具体方法:com包下的Dao接口中的save方法
  • 多个方法:所有的save方法,所有g开头的方法,所有以Dao结尾的接口中的任意方法等等...

3.通知(Advice):在SpringAOP中,功能最终以方法的形式呈现,第3步,method就是通知,它里面写了一个你想要让某些方法执行的共性功能

4.通知类:定义通知的类,第3步,包含通知的类就是通知类

5.切面(Aspect):描述通知与切入点的对应关系,第6步,@Aspect注解将当前类设置为切面类

AOP 简介及入门步骤相关推荐

  1. #java #web jsp开发入门(web应用概述、tomcat简介、编写步骤)

    #java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 目录 #java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 1.w ...

  2. DL之CG:Computational Graph计算图的简介、入门、使用之详细攻略

    DL之CG:Computational Graph计算图的简介.入门.使用之详细攻略 目录 计算图的简介 计算图的入门 CG与局部计算 计算图的使用 计算图的简介 计算图Computational G ...

  3. Ubuntu:Ubuntu下安装Anaconda和Tensorflow的简介、入门、安装流程之详细攻略

    Ubuntu:Ubuntu下安装Anaconda和Tensorflow的简介.入门.安装流程之详细攻略 目录 安装流程 1.安装nvidia显卡驱动 2.安装cuda8 3.安装Cudnn 4.Ana ...

  4. CoffeeScript 简介与安装步骤概览

    CoffeeScript 简介与安装步骤概览 一.关于CoffeeScript CoffeeScript是一门新兴的构建在JavaScript之上的预处理器语言,经过编译可以生成高效的JavaScri ...

  5. MyBatis 简介及入门程序

    MyBatis 简介及入门程序 文章目录 MyBatis 简介及入门程序 1 基本概念 2 MyBatis 与 Hibernate 3 MyBatis 的核心接口与对象 3.1 SqlSessionF ...

  6. AOP配置开发入门案例

    该AOP开发入门案例采用XML文件方式配置开发(非注解方式)共包含一个xml文件和4个Java类,创建好web工程后引入相应jar包(文末会给出),建好包(若自定义包名注意更改类中的包名),将xml文 ...

  7. python网络爬虫的基本步骤-黑客基础 编写Python爬虫入门步骤

    原标题:黑客基础 编写Python爬虫入门步骤 信息时代,数据就是宝藏.数据的背后隐含着无穷的宝藏,这些宝藏也许就是信息量所带来的商业价值,而大数据本身也将成为桌面上的筹码. 黑客花无涯 带你走进黑客 ...

  8. Python之路【第一篇】:Python简介和入门

    Python之路[第一篇]:Python简介和入门 Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗 ...

  9. 【AOP 面向切面编程】AOP 简介 ( AspectJ 简介 | AspectJ 下载 )

    文章目录 一.AOP 简介 二.AspectJ 简介 三.AspectJ 下载 一.AOP 简介 AOP 是 Aspect Oriented Programming 的缩写 , 面向切面编程 ; 利用 ...

最新文章

  1. 机器人导航两篇顶级会议论文解析
  2. POJ C++程序设计 编程题#4:计算整数平方和
  3. 蚂蚁金服对研发高要求的领域建模能力是指什么?
  4. Qt中的JSON支持
  5. cpu倍频模式怎么调_CPU频率被锁定到800mhz怎么办?
  6. emulator教程 lbochs pc_bochs 开启调试选项
  7. mysql添加列默认null_MySQL-无法在列中插入NULL值,但是我指定了默认值吗?
  8. pcie数据反_PCIe事务层の详解(一)
  9. 论文阅读-可变形卷积网络:Deformable Convolutional Networks
  10. 聊聊集成电路工程技术人员都有哪些?
  11. 汇编语言---80386寄存器,GCC内联汇编语法
  12. 这一年很幸运,平平淡淡的|2021 年度总结
  13. RSF 分布式服务框架设计
  14. mysql表中字段数据类型_mysql数据表中字段的数据类型有哪些?
  15. Kerberos (一) --------- Kerberos 部署
  16. Linux 编译Aria2c最新版本
  17. 37、测试Yolox+TensorRT Yolox+NCNN Yolox+Tengine
  18. 进度条上的小圆点怎么做_4个方面轻松搞定进度条
  19. canmatrix将DBC转为xlsx文件0基础详细教程
  20. 象棋棋霸2006 v5.1 五合一免费版 怎么用

热门文章

  1. vscode 自定义小清新主题色
  2. 酷我音乐盒java_Java Swing仿“酷我音乐盒”界面,搭建简单通用前端框架
  3. 荣耀9原生android,荣耀9评测:系统体验和性能音效
  4. android 方舟编译器,华为方舟编译器:Android 的性能革命
  5. linux查看cpu核心电压,来感受Linux命令行的“真香定律”
  6. 吉林大学计算机学院王喆副院长,DSNE_一个新的动态社会网络分析算法
  7. docx行间距怎么设置_word2017如何设置行间距
  8. 解决Word文档被保护无法编辑问题(编辑时鼠标回到页前
  9. centos7增加虚拟内存
  10. Oracle日期格式化相关说明