目录

一、操作术语

二、AspectJ(准备工作)

1.什么是 AspectJ

2.基于AspectJ 实现AOP操作

3.切入点表达式

三、AOP操作(AspectJ注解)

四、AOP操作(AspectJ配置文件)


一、操作术语

1、连接点
        类里面哪些方法可以被增强,这些方法称为连接点

2、切入点
        实际被真正增强的方法,称为切入点

3、通知(增强)
        (1)实际增强的逻辑部分称为通知(增强)

(2)通知有多钟类型

前置通知

后置通知

环绕通知

异常通知

最终通知

4.切面

将通知应用到切入点的过程。

二、AspectJ(准备工作)

Spring框架中一般基于 AspectJ 实现AOP相关操作

1.什么是 AspectJ 

        * AspectJ 并不是Spring组成部分,是独立的AOP框架,一般将 AspectJ 和 Spring 框架一起使用,进行AOP操作

2.基于AspectJ 实现AOP操作

(1)基于xml配置文件实现

(2)基于注解方式实现(实际使用)

3.在项目中引入AOP相关依赖

3.切入点表达式

(1)切入点表达式作用:知道对哪个类里面的哪个方法进行增强

(2)语法结构:

        execution([权限修饰词] [返回类型] [类全路径] [方法名称] ([参数列表]))

举例1:对 com.xx.dao.BookDao类中的add()方法进行增强

execution(*com.xx.dao.BookDao.add()(..))

举例2:对com.xx.dao.BookDao类中的所有方法进行增强

execution(*com.xx.dao.BookDao.*(..))

举例3: 对com.xx.dao包中的所有类,类里的所有方法进行增强

execution(*com.xx.dao.*.*(..))

注: * :可以是public、private,为了为方便则用 * 代替(表示什么类型都可以)

 ..:表示参数列表

三、AOP操作(AspectJ注解

1.创建类,在类中定义方法

package com.xx.AOP;public class User {public void add(){System.out.println("add.....");}
}

2.创建增强类(编写增强逻辑)

package com.xx.AOP;//增强的类
public class UserProxy {//前置通知(在User.add()方法执行前执行此方法)public void before(){System.out.println("before.......");}
}

3.进行通知配置

(1)在Spring配置文件中,开启注解的扫描 (可以通过配置类—完全注解开发,也可以通过配置文件,此处使用配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!--开启注解扫描--><context:component-scan base-package="com.xx.AOP"></context:component-scan></beans>

(2)使用注解,创建User和UserProxy

(3)在增强类上面添加@Aspect

(4)在Spring配置文件中开启代理对象

4. 配置不同类型的通知

(1)在增强类中,在作为通知的方法上添加通知类型的注解,并使用切入点表达式来配置内容

测试: 

package com.xx.Test;import com.xx.AOP.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestAop {@Testpublic void testAop(){ApplicationContext context =new ClassPathXmlApplicationContext("AOP.xml");User user = context.getBean("user", User.class);user.add();}
}/*
before.......
add.....
*/

注:其他类型通知注解 

后置通知:@After

异常通知:@AfterThrowing(当增强方法的过程中有异常才执行)

最终通知:@AfterReturning

环绕通知:@Around

注:环绕通知中必须传入ProceedingJoinPoint对象,调用其proceed()方法来手动执行切入点,否则什么也不执行

5.公共切入点抽取

6. 有多个增强类对同一个方法进行增强,设置增强类的优先级

比如再创建一个类对User.add()方法进行增强

package com.xx.AOP;import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;@Component
@Aspectpublic class PersonProxy {@Before(value = "execution(* com.xx.AOP.User.add())")public void Before(){System.out.println("PersonProxy.before.......");}
}

(1)在增强类的上面添加注解 @Order(数字类型值),数字类型值越小,则优先级越高

则测试结果为:

四、AOP操作(AspectJ配置文件

1.创建两个类,增强类和被增强类,创建方法

2.在Spring配置文件中创建两个类对象

3.在Spring配置文件中配置切入点

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!--创建对象--><bean id="book" class="com.xx.AOPxml.Book"></bean><bean id="bookProxy" class="com.xx.AOPxml.BookProxy"></bean><!--配置AOP的增强--><aop:config><!--配置切入点--><!--id:切入点名称expression:切入点表达式(需要被增强的方法的类型及路径)--><aop:pointcut id="point" expression="execution(* com.xx.AOPxml.Book.buy(..))"/><!--配置切面--><aop:aspect ref="bookProxy"><!--配置作用在具体的方法上--><!--即 将增强类中的 method 以哪种通知类型 体现在哪个 切入点(pointcut-ref)上--><aop:before method="before" pointcut-ref="point"></aop:before></aop:aspect></aop:config>
</beans>

测试:

public void testAOPxml(){ApplicationContext context = new ClassPathXmlApplicationContext("AopXml.xml");Book book = context.getBean("book", Book.class);book.buy();
}

结果:

注:也可以创建配置类使用完全注解方式来实现增强功能,不需要创建xml文件

Spring5框架—— AspectJ相关推荐

  1. Spring5 框架

    Spring5 框架 一.Spring概述 Spring是轻量级的开源的JavaEE框架. Spring可以解决企业应用开发的复杂性. Spring有两个核心部分:IOC和AOP. IOC:控制反转, ...

  2. 001 spring5框架:java类工程,IOC:实体类表示表关系,AOP,JdbcTemplate模板,事务操作,Spring5 框架新功能:日志,为空注解,函数式风格,juint,Webflux

    1. Spring5 框架(Spring5 Framework)介绍 1.1 概念 1.Spring 是轻量级的开源的 JavaEE 框架 2.Spring 可以解决企业应用开发的复杂性 3.Spri ...

  3. Spring5框架学习

    Spring5框架学习 备注:视频来源于尚硅谷 - Spring 5 框架最新版教程(idea版):https://www.bilibili.com/video/BV1Vf4y127N5 Spring ...

  4. Java总结:Spring5框架(1)

    Spring5框架(1) 一:什么是Spring? Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用 ...

  5. Spring5 框架新功能(Webflux)

    目录 1.SpringWebflux 介绍 2.响应式编程(Java 实现) 3.响应式编程(Reactor 实现) 1.SpringWebflux 介绍 (1)SpringWebflux 是 Spr ...

  6. Spring5框架-IOC容器

    Spring5框架 Spring包下载快照 一.Spring简绍 1什么是Spring 1.Spring是轻量级的开源的JAVAEE框架,可以解决企业应用开发的复杂性 2.Spring有两个核心的部分 ...

  7. Java系列技术之Spring5框架-钟洪发-专题视频课程

    Java系列技术之Spring5框架-33人已学习 课程介绍         Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个 ...

  8. Spring5 框架概述 、IOC 容器

    一.Spring5 框架概述 介绍 Spring 是轻量级的开源的 JavaEE 框架 Spring 可以解决企业应用开发的复杂性 Spring 有两个核心部分:IOC 和 Aop (1)IOC:控制 ...

  9. Spring5框架(上) IOC

    Spring5框架 IOC 前言 Spring框架概述 IOC容器 底层原理 Bean管理XML方式(创建对象和set注入属性) 注入集合类型属性1 IOC操作Bean管理 Bean管理(工厂Bean ...

最新文章

  1. Tesseract-OCR 3.04简单使用举例(读入图像输出识别结果)
  2. Flink1.4.0连接Kafka0.10.2时遇到的问题
  3. linux socket 时间,Socket编程获取服务器时间
  4. python爬取贴吧所有帖子-Python爬虫实例(一)爬取百度贴吧帖子中的图片
  5. mybaits二十一:2缓存介绍
  6. CCAI 2017 中国人工智能大会 6.4 折抢票倒计时!
  7. 万字长文教你看懂java G1垃圾回收日志
  8. 使用halcon将一个圆上的点拟合成圆形并且求出圆心
  9. Object.prototype 原型和原型链
  10. 谷歌(Google)是怎样对待离世的Google员工的?
  11. 月入过万的副业你要不要?不需要编程知识,不限男女,不限学历
  12. java读写mysql数据库_Java读写MySQL数据库小实例
  13. IntelliJ IDEA 2018 汉化补丁
  14. 圣杯布局——针对前端小白篇
  15. linux php5.3安装教程,Linux下安装MySql+Apache2+PHP5.3.1教程_PHP教程
  16. 2022: Python下载安装教程
  17. 预加重、去加重和均衡
  18. hdu6287 口算训练
  19. R329开发板系列教程之二|实机运行aipu程序
  20. 深井冰!沙雕码农脑洞大,盘点Github上那些不忍直视奇葩脑回路的沙雕项目!

热门文章

  1. php 反射 thinkphp,PHP反射(ReflectionClass、ReflectionMethod)在ThinkPHP框架的控制器调度模块中的应用...
  2. Android Studio的Logcat/Run/Terminal/Build等窗口没有了怎么调出
  3. 接口返回统一数据格式
  4. 微软对联软件遭质疑 网友称恶搞中国文化
  5. 最全的Matlab经典教程免费下载学习
  6. 网站设计的思考(藏)
  7. C/C++黑洞陷阱(Kaprekar问题)
  8. 讲真话、求真知、做真我——Facebook COO桑德伯格2012哈佛商学院毕业演讲
  9. 小王子(LCA的运用)
  10. 豌豆淘谈护肤:豌豆淘讲解肤质分类,不了解肤质谈何护肤?