Spring第六篇---AOP
接着Spring第五篇讲 我们今天将叙述以下几个知识点
1 什么是AOP
AOP 是一种思想 横向重复 纵向抽取
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AOP 解决 OOP 中遇到的一些问题.是 OOP 的延续和扩展.
2 为啥学习AOP
对程序进行增强,不改变源码的前提下 AOP 可进行权限校验,日志记录,性能监控,事物控制等功能。
3 Spring中AOP的由来
AOP 最早是由AOP联盟提出来的,并且制定了规范 Spring框架引入aop思想 必须遵守AOP联盟的规范
Spring中能够为容器中管理对象生成动态代理对象(以前自己写代码) spring能帮我们生成动态代理对象----》完成spring思想来开发。
4 Spring实现aop原理
就是动态代理技术和cglib技术
动态代理技术 被代理对象必须实现接口才能产生代理对象
cglib可以对所有类进行代理 但是如果该类被final修饰则无法被cglib代理
5 aop名词(相关术语)
5.1 Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点.5.1
5.2 Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义.指的就是已经发生的
5.3 Advice(通知/增强):增强的代码 所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
写好一个“通知” 把这些“通知” “切入”到“连接点”
5.4 Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方法或 Field.
5.5Target(目标对象):代理的目标对象(被代理对象)
5.6 Weaving(织入):是将通知 织入 切入点 过程 叫织入 是指把增强应用到目标对象来创建新的代理对象的过程. spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装在期织入
5.7 Proxy(代理): 将通知织如到目标对象之后,形成代理对象, 一个类被 AOP 织入增强后,就产生一个结果代理类Aspect(切面): 是切入点和通知(引介)的结合
5.8 aspect 切入点+通知
6 Spring中如何使用AOP
6.1 xml配置
6.1.1 导包
4+2+2+2
前六个包在前几次spring中已经提过 说后面两个2 分别是

后面的2 是aop联盟包 如下图
下的

第二个包 在搜索框搜 weaver 

6.1.2 准备目标对象 代码如下
@Override
public void save() {
System.out.println("存储李俊");
}
@Override
public void delete() {
System.out.println("删除账户");
}
@Override
public void update() {
System.out.println("更新账户");
}
@Override
public void find() {
System.out.println("查找用户");
}
6.1.3 准备通知(advice) 建类myAdvice 代码如下
public void before(){
System.out.println("这是前置通知");
}
public void afterReturning(){
System.out.println("这是后置通知 如果出现异常不会调用");
}
//环绕通知
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("这是环绕通知之前的部分!!");
Object proceed = pjp.proceed();//调用目标方法
System.out.println("这是环绕通知之后的部分!!");
return proceed;
}
public void afterException(){
System.out.println("出事啦!出现异常了!!");
}
//后置通知
public void after(){
System.out.println("这是后置通知(出现异常也会调用)!!");
}
其中环绕通知 需要特别记住。
6.1.4 写配置文件 将通知织入目标对象中 需要进行新的约束引入 代码如下
<!-- 1 配置目标对象 -->
<bean name="User" class="lijun.Service.UserServieImpl"></bean>
<!-- 2 配置通知对象 -->
<bean name="myAdvice" class="cn.lijun.springaop.MyAdvice"></bean>
<!-- 3将通知 织入 目标 -->
<aop:config>
<aop:pointcut expression="execution(* cn.lijun.Service.*ServiceImpl.*(..))" id="lj"/>
<aop:aspect ref="MyAdvice">
<!-- 指定名为before方法作为前置通知 -->
<aop:before method="before" pointcut-ref="lj" />
<!-- 后置 -->
<aop:after-returning method="afterReturning" pointcut-ref="lj" />
<!-- 环绕通知 -->
<aop:around method="around" pointcut-ref="lj" />
<!-- 异常拦截通知 -->
<aop:after-throwing method="afterException" pointcut-ref="lj"/>
<!-- 后置 -->
<aop:after method="after" pointcut-ref="lj"/>
</aop:aspect>
</aop:config>
</beans>
6.1.5 测试
package cn.lijun.springaop;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.lijun.Service.UserService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:cn/lijun/springaop/applicationContext.xml")
public class Demo {
@Resource(name="User")
private UserService u;
@Test
public void fun1(){
u.save();
}
}
6.2 注解配置 和上面类似。
Spring第六篇---AOP的更多相关文章
- Spring第六篇【Spring AOP模块】
前言 Spring的第五篇也算是AOP编程的开山篇了,主要讲解了代理模式-..本博文主要讲解Spring的AOP模块:注解方式和XML方式实现AOP编程.切入点表达式.. AOP的概述 Aop: as ...
- Spring总结六:AOP(面向切面编程)
概述: AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.它是一种新的 ...
- Spring 使用介绍(六)—— AOP(二)
一.切入点语法 1)通配符 AOP支持的通配符: *:匹配任何数量字符 ..:匹配任何数量字符的重复,在类型模式中匹配任何数量子包,在方法参数模式中匹配任何数量参数 +:匹配指定类型的子类型,仅能作为 ...
- 白话Spring(基础篇)---AOP(execution表达式)
作为AOP的最后一节内容,我们来简单总结一下切面表达式上见的书写方法.下面的那内容有参考其他博文,在此先对开源博客的各位大神表示感谢! -------------------------------- ...
- Spring Boot2(六):使用Spring Boot整合AOP面向切面编程
一.前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转.本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理. 二.何为aop aop全称Aspec ...
- 跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心
SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwic ...
- Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard
本文是Spring Cloud专栏的第六篇文章,了解前五篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...
- 白话Spring(基础篇)---AOP(execution表达式)(转)
[一知半解,就是给自己挖坑] 作为AOP的最后一节内容,我们来简单总结一下切面表达式上见的书写方法.下面的那内容有参考其他博文,在此先对开源博客的各位大神表示感谢! ----------------- ...
- spring cloud系列教程第六篇-Eureka集群版
spring cloud系列教程第六篇-Eureka集群版 本文主要内容: 本文来源:本文由凯哥Java(kaigejava)发布在博客园博客的.转载请注明 1:Eureka执行步骤理解 2:集群原理 ...
随机推荐
- Raid信息丢失数据恢复及oracle数据库恢复验证方案
早些时候,有个客户14块盘的磁盘阵列出现故障,需要恢复的数据是oracle数据库,客户在寻求数据恢复技术支持,要求我提供详细的数据恢复方案,以下是提供给客户的详细数据恢复解决方案,本方案包含Raid数 ...
- Loadrunner-场景设置以及监控结果分析
一.Controller的基本工作原理:通过1.2.3设置来模拟用户的操作,收集出4的各种信息 二.场景设置一般步骤 1.新建场景(Controller) 2.添加脚本 3.设置Schedule(设置 ...
- MySQL 利用xtrabackup进行增量备份详细过程汇总 (转)
Xtrabackup下载.安装以及全量备份请参考:http://blog.itpub.net/26230597/viewspace-1465772/ 1,创建mysql备份用户 mysql -uroo ...
- 在Azure New Portal上创建基于ARM的带SLB的VM
目前Azure的New Portal在国内已经上线了.本文将介绍最常见的一种场景:通过Azure的New Portal创建带有Server Load Balance的多台虚拟机. 1 创建Resour ...
- 蓝桥杯 算法训练 ALGO-118 连续正整数的和
算法训练 连续正整数的和 时间限制:1.0s 内存限制:256.0MB 问题描述 78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27. 输入一个正整数 n ...
- Spring Boot 集成Swagger2生成RESTful API文档
Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...
- showModalDialog()子窗口刷新父窗口
今天再次使用showModalDialog(),发现了两个问题,一是子窗口如何刷新父窗口,二是窗口的参数问题. 1 子窗口刷新父窗口 如果是window.open();问题就好办,直接用window. ...
- sass实用知识点
本文总结sass相关核心知识点 说明:本文的内容是,我在开发实践中总结的实用性比较强的sass知识点,其他未涉及的知识,如果对你有作用请自行查阅 sass知识目录 嵌套 注释 SassScript @ ...
- 2007.1.1 string.Format
String.Format举例(C#) stringstr1 =string.Format("{0:N1}",56789); //result: 56,789.0 stringst ...
- 正则表达式 notes
nfs 网络文件系统 存储类型:块存储,对象存储,文件存储 nfs属于文件存储 crond 分钟小时日月周 命令:绝对路径 命令是由crond解释 /bin/bash a.sh */2 * * * * ...