Spring 中AOP及前后置增强案例
1、AOP面向切面编程
面向切面编程的本质:面向切面编程,指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来。
1主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。
2主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
2、AOP原理
- 将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决
- 采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能。
3、AOP相关术语
1 增强处理类型
- 前置增强:目标方法调用前
- 后置增强:目标方法调用后
- 环绕增强:前置+后置
- 异常抛出增强:只有在目标方法抛出异常时才执行
- 最终增强:finally
2 AOP的设计单元
术语名称 |
描述 |
切面(Aspect) |
横切关注点而被模块化的类,称之为切面 |
通知(Advice) |
切面要完成的工作,具体指代切面类中的某个方法 |
连接点(Join Point) |
一个应用在执行的过程中能被插入切面的一个点 |
切点(Point Cut) |
通配表达式,可以匹配一个或多个连接点 |
织入(Weaving) |
将切面应用到目标对象的代理对象的过程 |
4、AOP案例实现增强
(1)导入依赖
(2)实体类UserInfo 实现Serializable接口
(3)mapper中IUserInfoMapper接口
(4)mapper接口的实现类IUserInfoMapperImpl
(5)service中IUserInfoService接口
(6)service中接口实现类IUserInfoServiceImpl
(7)编码方式实现AOP
(8)增强类
(9)配置文件applicationContext.xml
- <?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:p="http://www.springframework.org/schema/p"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop.xsd">
- <!--声明Daobean bean的注入注入的都是实现类-->
- <bean id="iUserInfoMapper" class="cn.spring.mapper.impl.IUserInfoMapperImpl"></bean>
- <!--声明Service-->
- <bean id="iUserInfoService" class="cn.spring.service.impl.IUserInfoServiceImpl">
- <!--setter方法怎么注入:找到Name属性值,将属性值的开头改为大写,然后前缀加上setIUserInfoMapper-->
- <property name="iUserInfoMapper" ref="iUserInfoMapper"></property>
- </bean>
- <!--切面:增强类-->
- <bean id="myAdvice" class="cn.spring.advice.MyAdvice"></bean>
- <!--增加处理
- 切点:你要对哪一个方法进行增强 expression:切点表达式匹配的
- execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
- modifiers-pattern:方法的可见性,如public,protected;
- ret-type-pattern:方法的返回值类型,如int,void等;
- declaring-type-pattern:方法所在类的全路径名,如com.spring.Aspect;
- name-pattern:方法名类型,如buisinessService();
- param-pattern:方法的参数类型,如java.lang.String;
- throws-pattern:方法抛出的异常类型,如java.lang.Exception;
- 通配符:
- *通配符,该通配符主要用于匹配单个单词,或者是以某个词为前缀或后缀的单词。
- ..通配符,该通配符表示0个或多个项
- -->
- <aop:config>
- <!--切点-->
- <aop:pointcut id="pointcut" expression="execution(* *..service.*.*(..))"/>
- <!--织入 将增强处理和切点表达式符合的方法关联到一起-->
- <aop:advisor advice-ref="myAdvice" pointcut-ref="pointcut"></aop:advisor>
- </aop:config>
- </beans>
(10)测试类
(11)控制台 实现增强
Spring 中AOP及前后置增强案例的更多相关文章
- Spring中AOP简介与切面编程的使用
Spring中AOP简介与使用 什么是AOP? Aspect Oriented Programming(AOP),多译作 "面向切面编程",也就是说,对一段程序,从侧面插入,进行操 ...
- Spring中AOP相关源码解析
前言 在Spring中AOP是我们使用的非常频繁的一个特性.通过AOP我们可以补足一些面向对象编程中不足或难以实现的部分. AOP 前置理论 首先在学习源码之前我们需要了解关于AOP的相关概念如切点切 ...
- 框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)
一.AOP的核心概念回顾 https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#a ...
- Spring 中aop切面注解实现
spring中aop的注解实现方式简单实例 上篇中我们讲到spring的xml实现,这里我们讲讲使用注解如何实现aop呢.前面已经讲过aop的简单理解了,这里就不在赘述了. 注解方式实现aop我们 ...
- AOP 与 Spring中AOP使用(上)
AOP简介 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP是OOP的延续 ...
- 浅析Spring中AOP的实现原理——动态代理
一.前言 最近在复习Spring的相关内容,刚刚大致研究了一下Spring中,AOP的实现原理.这篇博客就来简单地聊一聊Spring的AOP是如何实现的,并通过一个简单的测试用例来验证一下.废话不 ...
- Spring中AOP相关的API及源码解析
Spring中AOP相关的API及源码解析 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring ...
- Spring中AOP原理,源码学习笔记
一.AOP(面向切面编程):通过预编译和运行期动态代理的方式在不改变代码的情况下给程序动态的添加一些功能.利用AOP可以对应用程序的各个部分进行隔离,在Spring中AOP主要用来分离业务逻辑和系统级 ...
- JAVA高级架构师基础功:Spring中AOP的两种代理方式:动态代理和CGLIB详解
在spring框架中使用了两种代理方式: 1.JDK自带的动态代理. 2.Spring框架自己提供的CGLIB的方式. 这两种也是Spring框架核心AOP的基础. 在详细讲解上述提到的动态代理和CG ...
随机推荐
- [20191127]探究等待事件的本源4.txt
[20191127]探究等待事件的本源4.txt --//昨天使用ash_wait_chains.sql脚本把各个生产库执行1遍,才发现我对一套系统性能理解错误.--//我一直以为这套系统存储有点问题 ...
- Codeforces 7E - Defining Macros 题解
目录 Codeforces 7E - Defining Macros 题解 前言 做法 程序 结尾 Codeforces 7E - Defining Macros 题解 前言 开始使用博客园了,很想写 ...
- JavaScript-----7.循环
1.循环 在JS中主要有以下三种类型的循环 for循环 while循环 do...while循环 2. for循环 2.1 语法结构如下: for (初始化变量: 条件表达式: 操作表达式) { // ...
- 【python爬虫】Xpath
一.xml是什么 1.定义:可扩展标记性语言 2.特点:xml的是具有自描述结构的半结构化数据. 3.作用:xml主要设计宗旨是用来传输数据的.他还可以作为配置文件. 二.xml和html的区别 1. ...
- PAT 1006 Sign In and Sign Out 查找元素
At the beginning of every day, the first person who signs in the computer room will unlock the door, ...
- IntelliJ中Git突然不能用,报错 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
记录一个昨天碰到的问题以及解决方法,希望对碰到一样问题的你有用! 昨天升级了一下Mac OS,重启后再打开IntelliJ,突然Git就不能用了,报了下面这样的错: 开始以为是不是Git出了问题,打开 ...
- 使用vue-cli创建工程的时候提示vue-cli Failed to download repo vuejs-templates/webpack-simple:self signed certificate in certificate chain的解决方法
最近在使用 vue-cli 脚手架创建项目的时候,遇到 webpack-simple 模板下载不成功的情况,提示 vue-cli Failed to download repo vuejs-templ ...
- Android给Viewpager默认指定页
上结果代码 private void setViewPaperItem(int position) { try { Class c = Class.forName("android.supp ...
- java 超详细面经整理(持续更新)2019.12.18
目录 Java SE 请你谈谈Java中是如何支持正则表达式操作的? 请你简单描述一下正则表达式及其用途. 请你比较一下Java和JavaSciprt? 在Java中如何跳出当前的多重嵌套循环? 讲讲 ...
- Android 开发时使用 ViewPager 的问题及解决方案整理
1. ViewPager 的页面重置问题 当我们使用ViewPager控件时,假设我们的ViewPager有三页,当我们第一次启动ViewPager显示第一页的时候,ViewPager会预加载第二页, ...