切面

Spring

允我心安 提交于 2020-02-29 22:27:55
1.Spring 简介 概述 Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。 根据功能的不同,可以将一个系统中的代码分为 主业务逻辑 与 系统级业务逻辑 两类。它们各自具有鲜明的特点:主业务代码间逻辑联系紧密,有具体的专业业务应用场景,复用性相对较低;系统级业务相对功能独立,没有具体的专业业务应用场景,主要是为主业务提供系统级服务,如日志、安全、事务等,复用性强。 Spring 根据代码的功能特点,将降低耦合度的方式分为了两类:IoC 与 AOP。IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring 容器统一管理,自动“注入”。(如 UserService userService=new UserServiceImpl())而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是 控制反转(IoC) 和 面向切面编程(AOP) 。简单来说,Spring 是一个分层的 Java SE/EE full-stack(一站式)轻量级开源框架。 Spring 由 20 多个模块组成

Spring Aop详解

扶醉桌前 提交于 2020-02-29 16:40:27
一、AOP背景 aop(aspect oriented progrmming), 面向切面编程. 在oop的概念中, 开发者可以自由的定义纵向关系, 但对横向的关系却有点束手无策. Aop技术的出现可以解决这一问题. 进一步描述问题:   代码混乱: 越来越多的非业务需求(日志和验证等)加入后, 原有的业务方法急剧膨胀, 每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点.    代码分散: 以日志需求为例, 只是为了满足这个单一的需求, 就不得不在多个模块(方法)里多次重复相同的日志代码.如果日志需求发生变化,必须更改所有的模块. aop的主要编程对象是切面,而切面模块化横切关注点. 在应用aop编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能在哪里,以什么方式应用, 并且不必修改受影响的类 aop的好处:   每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级   业务模块更简洁, 只包含核心业务代码 二、AOP基本概念 切面(Aspect): 横切关注点, 跨越应用程序多个模块的功能, 被模块化的特殊对象 通知(Advice): 切面必须要完成的工作 目标(Target): 被通知的对象 代理: 向目标对象应用通知之后创建的对象 连接点(JoinPoint): 程序执行的某个特定位置. 连接点由两个信息确定: 方法表示的程序执行点; 相对点表示的方位. 切点

以proxyfactorybean 简略了解spring aop

故事扮演 提交于 2020-02-29 01:25:30
proxyfactorybean实现较aspectj那部分实现要简单,他的使用基本上没有依赖到其他第三方JAR 包,基本上spring 写了这一块的内容。查看这部分内容,对于aop的了解是足够的。 详解前小结: 1.ajpectj那块相比于proxyfactorybean的切面执行顺序有不同,aspectj是将切面的执行顺序进行了排序,并且对于相同类型的切面可以进行排序,其执行顺序 而proxyfactorybean中的切面执行顺序需要自己手动自定,他是按照添加的顺序,依次执行,如开始执行的可能是after ->before->around->after->around->before等顺序,其使用时,不具体指定的话,容易出现问题,但也可以因为其灵活性进行更好自定义,(自定义这个东西,尽量不要用,除非有很大的效果,不然对因后期的人员流动,而导致维护苦难,而且性能也可能因考虑不周到导致出现问题。) 2.proxyfactorybean可以在需要执行时,动态添加一些特定的东西(将这个类定义为原型,然后每次获取添加不同的处理切面),从而实现不同的效果。aspectj源码过于庞大,现暂无能力去了解,所以这一点可能不是有那么准确。 详情: ProxyFactoryBean 类路径:org.springframework.aop.framework.ProxyFactoryBean 类结构图:

小知识:aspect切面中实现around环绕通知 发现方法的返回值为空

本秂侑毒 提交于 2020-02-28 21:53:04
经过调查使用@Arround环绕通知时, 一部分的执行逻辑中没有 return proceedJoinPoint.proceed(); 导致处理结果没有返回给dispacherServlet. 开发切面通知时,分支逻辑会比较多,切记给所有分支进行业务判断,必要分支的return proceedJoinPoint.proceed();一定不能遗漏。 来源: https://www.cnblogs.com/chongpf/p/12380440.html

spring aop 及实现方式

梦想的初衷 提交于 2020-02-28 13:50:16
一、AOP的基本概念: 1、什么是aop: AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。 在不改变原有的逻辑的基础上,增加一些额外的功能。代理也是这个功能,读写分离也能用aop来做。 AOP可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度

Spring之AOP

旧时模样 提交于 2020-02-28 12:56:04
简介 1、概念 AOP: Aspect-Oriented Programming 面向切面编程,是OOP面向对象编程的一种补充。 将程序宗交叉业务逻辑(事物、日志)代码提取出来,封装成切面,有AOP容器在适当时机(代码位置)将封装的切面动态的织入到具体业务逻辑中。 AOP不是Spring特有的,C++等也有。 2、应用场合 适用于具有横切逻辑的场合,如事物管理、日志管理、性能检测、异常通知、访问控制等。 3、作用 1)不改变原有代码的基础上动态添加新的功能。 2)模块化 4、术语 连接点Joinpoint : 程序执行的某个特定的位置,如方法调用前、方法调用后、方法抛出异常时、方法调用前后等。 切入点: 定位查找到需要的连接点,即切入点。一个切入点可包含多个连接点。 增强 Advice : 在切点上执行的一段程序代码,用来实现某些功能。 目标对象 target: 将执行增强处理的目标类。 织入 weaving: 将增强添加到目标类具体切入点上的过程。 代理 proxy: 一个类被织入增强之后,会产生代理类。 切面 aspect: 切点和增强的组合就叫做切面。 引介 Introduction 也称为引入: 可以为一个类添加一些属性和方法,但是一般不建议使用。 重点理解切入点、增强、目标对象 的概念 实现原理 1、代理模式 概念:为其他对象提供一种代理,以控制对这个对象的访问

Spring Aop深度解析(未完...)

跟風遠走 提交于 2020-02-28 09:54:36
Spring Aop深度解析 关于spring Aop也接触了好多知识了,在此,做一个总结,以便学习 。 Spring Aop是什么? AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。 基本术语: (1) 切面(Aspect) 切面是一个横切关注点的模块化,一个切面能够包含同一个类型的不同增强方法,比如说事务处理和日志处理可以理解为两个切面。切面由切入点和通知组成,它既包含了横切逻辑的定义,也包括了切入点的定义。 Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。 @Component @Aspect public class LogAspect { } 可以简单地认为, 使用 @Aspect 注解的类就是切面 (2) 目标对象(Target) 目标对象指将要被增强的对象,即包含主业务逻辑的类对象。或者说是被一个或者多个切面所通知的对象。 (3) 连接点(JoinPoint) 程序执行过程中明确的点,如方法的调用或特定的异常被抛出。连接点由两个信息确定:

VTK-图像切面提取

青春壹個敷衍的年華 提交于 2020-02-27 20:17:58
切片(Slice)或切面是三维图像比较常用的概念,尤其在医学图像中。通过提取切面可以方便地浏览和分析图像内部组织结构。VTK中vtkImageReSlice类可以实现图像切面的提取。在实际开发中,四视图中冠状视面、矢状面和横断面(显示过图像内部一点且平行于XY、YZ、XZ平面的平面),需要用到此类。 # include <vtkSmartPointer.h> # include <vtkImageReader2.h> # include <vtkMatrix4x4.h> # include <vtkImageReslice.h> # include <vtkLookupTable.h> # include <vtkImageMapToColors.h> # include <vtkImageActor.h> # include <vtkRenderer.h> # include <vtkRenderWindow.h> # include <vtkRenderWindowInteractor.h> # include <vtkInteractorStyleImage.h> # include <vtkCommand.h> # include <vtkImageData.h> # include <vtkMetaImageReader.h> # include

3.01、Spring AOP的理解

余生长醉 提交于 2020-02-27 12:20:49
注:转 https://mp.weixin.qq.com/s/PsgTLn8cdTxdd542XgVkUA 什么是AOP AOP(Aspect-Oriented Programming), 即 面向切面编程 , 它与 OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角. 在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面) 1、Aspect(切面) Aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中. AOP的工作重心在于如何将增强织入目标对象的连接点上, 这里包含两个工作: 1. 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 2. 如何在 advice 中编写切面代码. 可以简单地认为, 使用 @Aspect 注解的类就是切面. 2、Advice(增强) 由 aspect 添加到特定的 join point(即满足 point cut 规则的 join point) 的一段代码. 许多 AOP框架, 包括 Spring AOP, 会将