Spring笔记_03

1、AOP简介

1.1、什么是AOP?

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

    • OOP(Object Oriented Programming)面向对象编程

1.2、AOP作用

  • 作用:在不惊动原始设计的基础上为其进行功能增强,也可以通过代理模式实现

1.3、AOP核心概念

  • 无入侵式/无侵入式

  • 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等

    • 在SpringAOP中,理解为方法的执行

  • 切入点(Pointcut):匹配连接点的式子

    • 在SpringAOP中,一个切入点可以描述一个具体方法,也可以匹配多个方法

    • 连接点范围要比切入点范围打,是切入点的方法也一点是连接点,但是连接点的方法就不一定要被增强,所以可能不是切入点。

  • 通知(Advice):在切入点处执行的操作,也就是共性功能

    • 在SpringAOP中,功能最终以方法的形式呈现

  • 通知类:定义通知的类

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

2、AOP入门案例

2.1思路分析

1.导入坐标(pom.xml)

2.制作连接点(原始操作,Dao接口与实现类)

3.制作共性功能(通知类与通知)

4.定义切入点

5.绑定切入点与通知关系(切面)

2.2 环境准备

  • 创建一个Maven项目

  • pom.xml添加Spring依赖

<dependencies>
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>5.2.10.RELEASE</version>
     </dependency>
 </dependencies>
  • 添加BookDao和BookDaoImpl类

 public interface BookDao {
     public void save();
     public void update();
 }
 ​
 @Repository
 public 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 ...");
     }
 }
  • 创建Spring的配置类

 @Configuration
 @ComponentScan("com.linxin")
 public class SpringConfig {
 }

2.3、AOP实现步骤

步骤1:添加依赖 pom.xml

<dependency>
     <groupId>org.aspectj</groupId>
     <artifactId>aspectjweaver</artifactId>
     <version>1.9.4</version>
 </dependency>
  • spring-context中已经导入了spring-aop,所以不需要再单独导入spring-aop

  • 导入AspectJ的jar包,AspectJ是AOP思想的一个具体实现,Spring有自己的AOP实现,但是相比于AspectJ来说比较麻烦,所以我们直接采用Spring整合ApsectJ的方式进行AOP开发。

步骤2:定义通知类和通知

通知就是将共性功能抽取出来后形成的方法

 public class MyAdvice {
     public void method(){
         System.out.println(System.currentTimeMillis());
     }
 }

步骤3:定义切入点

BookDaoImpl中有两个方法,分别是save和update,我们要增强的是update方法,该如何定义呢?

 public class MyAdvice {
     @Pointcut("execution(void com.linxin.dao.BookDao.update())")
     private void pt(){}
     public void method(){
         System.out.println(System.currentTimeMillis());
     }
 }

说明:

  • 切入点定义依托一个不具有实际意义的方法进行,即无参数、无返回值、方法体无实

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值