切面

Spring ( 四 )Spring的AOP动态代理、切面编程

不羁的心 提交于 2019-12-02 21:26:19
一、AOP切面编程 1、什么是AOP AOP是面向切面编程。全称:Aspect Oriented Programming 面向切面编程指的是: 程序是运行期间, 动态地将某段代码插入到原来方法代码的某些位置中。这就叫面向切面编程。 2、一个简单计算数功能加日记 public class LogUtil { public static void logBefore(String method, Object... args) { System.out.println("方法是【" + method + "】,参数是:" + Arrays.asList(args));// 日记 } public static void logAfterReturning(String method, Object result) { System.out.println("方法是【" + method + "】,返回值是:" + result);// 日记 } } public interface Calculate { // 加法 public int add(int num1, int num2); // 加法 public int add(int num1, int num2, int num3); // 除法 public int div(int num1, int num2); } 实现类

[spring学习3] AOP

非 Y 不嫁゛ 提交于 2019-12-02 19:13:35
简介 典型的应用场景就是日志,我们需要在某段业务代码的前后做一些日志输出的话,如果我们将日志代码与业务代码混在一起,是非常难以解耦合的。 aop就是应对这种情况产生的技术。 概念 通知 | |切点 ↓ ——*——*——*——程序执行→ ↑ ↑ ↑ 连接点 通知 切面的工作被称为通知。 通知以日志为例,就是想要插入到业务代码的日志程序。 Spring切面的5种类型的通知: 前置通知(Before) 后置通知(After) 返回通知(After-returning) 异常通知(After-throwing) 环绕通知(Around) 在什么时候执行通知。 连接点 连接点是在应用执行过程中能够插入切面的一个点。 这个点就是触发执行通知的时机:如调用方法时,抛出异常时,修改字段时。 切点 一个切面并不需要通知应用的所有连接点,切点有助于缩小切面所通知的连接点的范围。 相对于连接点而言,连接点是所有可以供通知切入的地方,切点就是满足设定条件的连接点。 切面 切面 = 通知 + 切点 引入 向现有类添加新方法或属性。 织入 把切面应用到目标对象,并创建新的代理对象的过程。 在目标对象的生命周期里可织入的点: 编译期 类加载期 运行期 AOP支持 Spring提供的4种类型的AOP支持: 基于代理的经典Spring AOP(过于笨重复杂,直接使用ProxyFactory Bean。)

Spring 基础知识学习

对着背影说爱祢 提交于 2019-12-02 18:14:55
摘自: https://www.cnblogs.com/leton/p/11755192.html Spring 基础知识学习 Spring 总结 在Spring框架的发布版本中,共包含了20个不同的模块,可以划分为6类不同的功能。 Spring整体架构图 为了降低Java开发的复杂性,Spring采取了以下4种关键策略: 基于POJO的轻量级和最小侵入性编程; 通过依赖注入和面向接口实现松耦合; 基于切面和惯例进行声明式编程; 通过切面和模板减少样板式代码。 依赖注入 DI 创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入(DI)的本质。 当描述bean如何进行装配时,Spring具有非常大的灵活性,它提供了三种主要的装配机制: 在XML中进行显式配置。 在Java中进行显式配置。 隐式的bean发现机制和自动装配。 自动化装配bean Spring从两个角度来实现自动化装配: 组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。 自动装配(autowiring):Spring自动满足bean之间的依赖。 组件扫描和自动装配组合在一起就能发挥出强大的威力,它们能够将你的显式配置降低到最少。 @Component注解表明该类会作为组件类,并告知Spring要为这个类创建bean

Spring中AOP的实现

家住魔仙堡 提交于 2019-12-02 16:38:41
Spring中整合了AOP的功能,虽然有不足,没有专门做AOP框架的那么完美,但是用一用感觉还是不错的 一些概念: AOP 面向切面编程 aspect 切面/切面类(我个人认为一个真正被解耦的程序,切面类中的功能可以切入到 任何一个目标类中 无所谓是service层或者说是dao层中的类) joinPoint 连接点 在spring的aop中只有 类中的方法 可以做连接点,每一个方法都可以是一个连接点. pointCut 切入点 一组连接点的集合 advice 通知/拦截器 用来控制切面类将来到底是织入到切入点的前面、后面或者是抛异常的时候。 adivsor 增强器 用来筛选类中的哪些方法是我们的连接点(哪些方法需要被拦截). target 目标对象 proxy 代理对象 wave 织入 ----------------------- advice(通知)的类型: 前置通知(Before advice): 在某些连接点(join point)之前执行的通知 返回后通知(After returning advice): 在某些连接点(join point)正常完成后执行的通知(方法正常结束,没有异常) 抛出异常后通知(After throwing advice): 在某些连接点(join point)抛出异常退出时执行的通知 后通知(After (finally) advice):

Spring 基础知识学习

懵懂的女人 提交于 2019-12-02 16:37:20
Spring 总结 在Spring框架的发布版本中,共包含了20个不同的模块,可以划分为6类不同的功能。 Spring整体架构图 为了降低Java开发的复杂性,Spring采取了以下4种关键策略: 基于POJO的轻量级和最小侵入性编程; 通过依赖注入和面向接口实现松耦合; 基于切面和惯例进行声明式编程; 通过切面和模板减少样板式代码。 依赖注入 DI 创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入(DI)的本质。 当描述bean如何进行装配时,Spring具有非常大的灵活性,它提供了三种主要的装配机制: 在XML中进行显式配置。 在Java中进行显式配置。 隐式的bean发现机制和自动装配。 自动化装配bean Spring从两个角度来实现自动化装配: 组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。 自动装配(autowiring):Spring自动满足bean之间的依赖。 组件扫描和自动装配组合在一起就能发挥出强大的威力,它们能够将你的显式配置降低到最少。 @Component注解表明该类会作为组件类,并告知Spring要为这个类创建bean @ComponentScan注解启用组件扫描 @Autowired注解实现自动装配 通过Java代码装配bean

Spring AOP

僤鯓⒐⒋嵵緔 提交于 2019-12-02 15:49:37
切面(Aspect):切面用于组织多个Advice,Advice放在切面中定义 连接点(Joinpoint):程序执行过程中明确的店,如方法的调用,或者异常的抛出。在SpringAOP中,连接点总是方法的调用 增强处理(Advice):AOP框架在特定的切入点执行的增强处理。处理有“around”、“before”、“after”等类型 切入点(Ponitcut):可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理。该连接点也就变成了切入点 引入:将方法或字段添加到被处理的类中 目标对象:被AOP框架进行增强处理的对象。如果AOP框架采用的是动态代理AOP实现,那么该对象就是一个被代理的对象 AOP代理:AOP框架创建的对象,简单地说,代理就是对目标对象的加强 织入:将增强处添加到目标对象中,并创建一个被增强的对象的过程就是织入 业务类 public class Calculator { //业务逻辑方法 做除法 public int div(int i,int j){ System.out.println("-------"); return i/j; } } 切面类 @Aspect public class LogAspects { @Pointcut("execution(public int cn.qin.aop.Calculator.

Spring JDK动态代理

狂风中的少年 提交于 2019-12-02 15:44:17
1. 创建项目在 MyEclipse 中创建一个名称为 springDemo03 的 Web 项目,将 Spring 支持和依赖的 JAR 包复制到 Web 项目的 WEB-INF/lib 目录中,并发布到类路径下。 2. 创建接口 CustomerDao 在项目的 src 目录下创建一个名为 com.mengma.dao 的包,在该包下创建一个 CustomerDao 接口,编辑后如下所示。 package com.mengma.dao; public interface CustomerDao { public void add(); // 添加 public void update(); // 修改 public void delete(); // 删除 public void find(); // 查询 } 3. 创建实现类 CustomerDaoImpl 在 com.mengma.dao 包下创建 CustomerDao 接口的实现类 CustomerDaoImpl,并实现该接口中的所有方法,如下所示。 package com.mengma.dao; public class CustomerDaoImpl implements CustomerDao { @Override public void add() { System.out.println("添加客户..."

AOP切面前置后置环绕通知的讲解和运用之手写切面+详解

人盡茶涼 提交于 2019-12-02 14:35:09
首先让我们先说一下切面需要我们关注哪些地方(组成部分), 1.切面点表达式[pointcut]:指定类的指定方法(就是为了定位指定类的指定方法) 2.方位:定义在指定方法的前,后,抛出异常,等等 3.执行横切业务逻辑:公共部分的代码, 注:那什么是公共部分的代码?如:日志记录,性能统计,安全控制,事务处理等方面 4.通知[advice] : 包涵方位,横切业务逻辑 5.连接点[JoinPoint] : 包涵切点表达式,方位 什么意思那??一张图告诉你,,, 接着我们要知道一个常识 ; 我们AOP可以实现的功能不用AOP也可以实现 那问题来了,我们不用AOP怎么实现这个日志的记录 那我们就举个Product的栗子: 比如写增加时(伪代码) addProduct(){ log.info("开始执行addProduct方法") 添加产品的核心逻辑 log.error("执行出错:某某某") } 那删除也是一样的 deleteProduct(){ log.info("开始执行deleteProduct方法") 添加产品的核心逻辑 log.error("执行出错:某某某") } 之后的修改也一样,,, 那,问题来了,这样写方便吗??? 是,现在写,感觉挺方便,但是有没有考虑到一个问题, 这是在写一个的增删改,那么我们在正常的项目里,有多少条增删改,,, 1百?一千?1一万???

面向切面编程 AOP

久未见 提交于 2019-12-02 13:46:30
面向切面编程 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 使用"横切"技术,AOP把软件系统分为两个部分: 核心关注点 和 横切关注点 。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志

【串线篇】面向切面编程AOP

早过忘川 提交于 2019-12-02 12:02:55
面向切面编程AOP 描述:将某段代码“动态”的切入到“指定方法”的“指定位置”进行运行的一种编程方式 (其底层就是Java的动态代理)spring对其做了简化书写 场景: 1)、AOP加日志保存到数据库 2)、AOP做权限验证,filter能做的它都能 3)、AOP做安全检查 4)、AOP做事务控制 AOP专业术语: 来源: https://www.cnblogs.com/yanl55555/p/11744089.html