切面

Spring-AOP

会有一股神秘感。 提交于 2020-02-12 21:11:09
AOP概述 1.什么是AOP: AOP就是面向切面编程,是Spring框架的核心。 2.AOP底层的实现原理: 动态代理分为: JDK动态代理:基于接口的动态代理 Cglib动态代理:基于类的动态代理 3.AOP作用: 在不更改源码的情况下,去动态的增强对象的一些功能 AOP相关术语 Spring的AOP的实现底层实现就是对于动态代理的实现的代码进行了封装,封装之后我们只需要对需要关注的部分进行代码编写,并且通过配置的方式完成指定的目标的方法的增强。 Target(目标对象):代理目标的对象 Proxy(代理):一个类被AOP织入增强后,就会产生一个代理的结构类 Joinpoint(连接点):指那些被拦截到的点,在spring中指的是方法 Pointcut(切入点):对于连接点进行确定的要被增强的方法就是切入点 Adivce(通知/增强):拦截到连接点后要进行的操作就被称为通知/增强 Aspect(切面):切入点和通知结合后就是切面 Weaving(织入):指把增强应用到目标对象来创建新的对象的过程 AOP开发需要明确的事项 需要编写的代码 编写核心业务代码(目标类的目标方法) 编写切面类,切面类中有通知 在配置文件中使切面类与目标类创建的Bean对象产生织入的关系 AOP会使用那种代理方式 AOP底层会根据创建的目标对象是否有接口而判断是使用JDK方式还是Cglib方式

快速学习-Spring(AOP注解配置)

亡梦爱人 提交于 2020-02-12 13:17:41
第5章 AOP注解配置 5.1 切入点表达式 5.1.1 作用 通过表达式的方式定位一个或多个具体的连接点。 5.1.2 语法细节 切入点表达式的语法格式 execution([权限修饰符] [返回值类型] [简单类名/全类名] [方法名]([参数列表])) 举例说明 在AspectJ中,切入点表达式可以通过 “&&”、“||”、“!”等操作符结合起来。 5.1.3 切入点表达式应用到实际的切面类中 5.2 当前连接点细节 5.2.1 概述 切入点表达式通常都会是从宏观上定位一组方法,和具体某个通知的注解结合起来就能够确定对应的连接点。那么就一个具体的连接点而言,我们可能会关心这个连接点的一些具体信息,例如:当前连接点所在方法的方法名、当前传入的参数值等等。这些信息都封装在JoinPoint接口的实例对象中。 5.2.2 JoinPoint 5.3 通知 5.3.1 概述 在具体的连接点上要执行的操作。 一个切面可以包括一个或者多个通知。 通知所使用的注解的值往往是切入点表达式。 5.3.2前置通知 前置通知:在方法执行之前执行的通知 使用@Before注解 5.3.3后置通知 后置通知:后置通知是在连接点完成之后执行的,即连接点返回结果或者抛出异常的时候 使用@After注解 5.3.4返回通知 返回通知:无论连接点是正常返回还是抛出异常,后置通知都会执行

切面:统一处理异常

那年仲夏 提交于 2020-02-11 14:20:26
开发中,多个接口处理业务时,若发生异常,希望可以统一处理这些异常,这时就可以把异常抛出,使用切面统一处理. 使用Springboot开发,不需要其他配置.导入依赖即可 <!--aop依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> @Around:可以手动调用切点方法,这样就可以在接口方法执行的前,中,后进行相关的业务处理. @Aspect @Slf4j @Component public class GlobalExceptionAspectForRpc { /** * * 由于spring 的全局异常处理只能对http请求有效,所以对于rpc的调用不起作用。 * 所以:我们采用自定义切面的方法 * @param joinPoint * @throws Throwable */ @Around("execution(* com.test.controller.*.*(..))") public Object printException (ProceedingJoinPoint joinPoint) throws Throwable { Object result = null;

Spring使用自定义切面(aop)方法时不生效

十年热恋 提交于 2020-02-10 18:43:46
这里我以shiro+springboot的一个例子为例,理解为主即可 1.先了解怎么做到spring切面编程(aop) 1).制作切面类 2).在userServiceimpl加入切面注解 2.确定在那里使用到被切对象 1).shiro中使用到userService 2.)在 controller使用到 注意其中config(springboot的启动类)对象中加载shiro对象 执行: controller访问的时候发现无法触发切面方法 解决: 这是因为在spring加载shiro(UserRealm类)的时候使用此时切面类还没加载,但是在UserRealm类中又注入了UserServiceImpl类(注意:此时不是代理类,就是个普通类而已,且该类已经注入到spring容器中,不会再注入第二次了),因此在controller调用的userService方法的时候不是代理类,所以无法做到切面。 解决方法:在UserRealm对象中的UserService加上@Lazy注解,延迟注入到Spring容器,让切面类加载完后再注入 来源: CSDN 作者: 风吹底裤飘 链接: https://blog.csdn.net/qq_37431224/article/details/104252084

Spring学习

99封情书 提交于 2020-02-09 19:48:24
Spring 最近两天回了长沙,待在租房不能出门,复习了一下Spring框架。在Spring框架中,最重要的就是控制反转IOC和面向切面AOP,说一下自己的理解吧,权当自己做了一些笔记。 控制反转IOC 在Spring中通过IOC容器,将对象之间的依赖交由Spring进行统一控制管理,实现程序之间的解耦,IOC包括依赖注入DI和依赖查找,最常被用到的就是依赖注入,是IOC的具体表现。 图片来源于黑马视频 依赖注入DI 实现依赖注入一共有三种注入方式,分别是构造函数注入,Setter注入,基于注解的注入;最常被用到的就是构造函数注入和Setter注入。其中,构造函数注入和Setter注入都在在XML配置,基于注解的注入是通过注解配置。 1, 构造函数注入 使用类中的构造函数,给成员变量赋值。其中,赋值的操作不是我们自己做的,而是通过配置 的方式,让 spring 框架来为我们注入。 涉及到的标签:constructor-arg 属性: index:指定参数在构造函数参数列表的索引位置; type:指定参数在构造函数中的数据类型; name:指定参数在构造函数中的名称(通过这个属性确定为谁赋值); value:它能赋的值是基本数据类型和 String 类型; ref:它能赋的值是其他 bean 类型(必须得是在配置文件中配置过的 bean); 2, Setter注入

Spring AOP的使用及源码解读 (一)

ε祈祈猫儿з 提交于 2020-02-07 11:13:12
前言 AOP[底层是动态代理]为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。(百度百科的解释) 其实按通俗话理解就是对我们的方法进行增强。也就是在我们执行方法的前,后,结束返回等情况增加相应的通知(在Java中的表现就是相应的控制台打印) 1.创建相关AOP的应用实例(如何用?) 我们编写相关spring AOP的实例的时候,首先要编写一个业务类如Calculator(这个类就是我们要进行切面增强的类),还有一个相关的切面类如LogAspects (这个类主要是对我们业务类的方法进行增强)和一个最重要的配置类如Cap10MainConfig(对相关bean注入的一个声明) (1)记得在编写前导入相应的依赖(在Maven工程中的pom.xml下) <!-- 使用AOP需要导入 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.0.6.RELEASE</version> </dependency> (2)编写业务类(Calculator.class) package com.enjoy.cap10.aop; public

Spring框架简介

淺唱寂寞╮ 提交于 2020-02-04 19:24:09
1、使用框架的意义与Spring的主要内容 随着软件结构的日益庞大,软件模块化趋势出现,软件开发也需要多人合作,随即分工出现。如何划分模块,如何定义接口方便分工成为软件工程设计中越来越关注的问题。良好的模块化具有以下优势:可扩展、易验证、易维护、易分工、易理解、代码复用。 优良的模块设计往往遵守“低耦合高内聚”的原则。而“框架”是对开发中良好设计的总结,把设计中经常使用的代码独立出来,所形成的一种软件工具。用户遵守它的开发规则,就可以实现良好的模块化,避免软件开发中潜在的问题。广义上的框架无处不再,一个常见的例子就是PC硬件体系结构,人们只要按照各自需要的主板、显卡、内存等器件就可以任意组装成自己想要的电脑。而做主板的厂商不用关心做显卡厂商的怎么实现它的功能。软件框架也是如此,开发人员只要在Spring框架中填充自己的业务逻辑就能完成一个模块划分清晰纷的系统。 这里主要通过一个银行通知用户月收支记录的小例子来介绍轻型J2EE框架Spring的主要内容、它所解决的问题和实现的方法。 Spring框架主要可以分为3个核心内容: 容器 控制反转(IoC ,Inversion of Control) 面向切面编程(AOP ,Aspect-Oriented Programming) 例子中依次对这些特性进行介绍,描述了软件模块化后存在的依赖与问题,以及Spring框架如何解决这些问题。 2

spring 面试问题

℡╲_俬逩灬. 提交于 2020-02-04 18:26:17
spring bean 的作用域 1.singleton:唯一bean实例,Spring中的bean默认都是单例的。 2.prototype:每次请求都会创建一个新的bean实例。 3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。 4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。 spring mvc 的工作流程 一个请求→DispatcherServlet根据请求信息调用HandlerMapping→转发到固定handler上即Controller→处理完业务后返回ModelAndView对象→DispatcherServlet把返回的Model传给View 最后返回浏览器。 spring 当中的设计模式 单例 工厂(BeanFactory) 代理 springaop(面向切面代理接口)适配器模式(springmv分配hanglermapping) 装饰模式 给类添加额外职责(Decorator) 观察者模式(spring驱动事件) 策略模式(访问resource接口 不同的 resource) 模板模式 spring 控制事务的几种方式 1编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()

Spring4-AOP(三)

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-02 03:05:30
文章目录 1.AOP 1.1 `代理` 1.2 `AOP简介` 1.3 `AspectJ` 1.4 `通知` 1.4.1 前置通知 1.4.2 后置通知 1.4.3 返回通知 1.4.5 异常通知 1.4.6 环绕通知 1.5 `切面优先级设置` 1.6 `重用切入点定义` 1.7 `引入通知` 2.基于XML配置 2.1 `声明切面` 2.2 `声明切点` 2.3 `声明通知` 2.4 `声明引用` 1.AOP 背景: 1.1 代理 1.2 AOP简介 上面验证和日志,都抽出来,然后组成的一个个集合,就是切面 1.3 AspectJ 1.4 通知 1.4.1 前置通知 1.4.2 后置通知 1.4.3 返回通知 1.4.5 异常通知 1.4.6 环绕通知 1.5 切面优先级设置 1.6 重用切入点定义 1.7 引入通知 2.基于XML配置 2.1 声明切面 2.2 声明切点 2.3 声明通知 2.4 声明引用 来源: CSDN 作者: tellmeyesorno 链接: https://blog.csdn.net/u010247166/article/details/104135471

怎么保证测试用例的覆盖率

我们两清 提交于 2020-02-01 20:34:18
转自:http://www.51testing.com/html/71/n-865171-2.html 可参考:http://www.cnblogs.com/TestWorld/p/5211043.html 待总结.. 一、测试用例的切面设计   所谓测试切面设计,其实就是测试用例大项的划分。测试用例划分的经典方法是瀑布模型,也就是从上到下,逐渐细分,大模块包括小模块,小模块包括更小的模块。但仅仅如此是不够的,我们还要从更多的角度切入系统,从不同的角度把系统切分成一块一块的,来进行测试,从而确保测试大项的完整性。   1、功能点切面   这是最常见的切面,通常我们认为页面上的一个按钮就是一个功能点。然后我们可以根据功能的复杂程度,按每个功能;或一个功能点分多页;或多个功能点合成一页来进行用例的撰写。   2、特定切面   除此以外,还有一种特定切面的划分方法,也是用例撰写时经常会用到的。所谓的特定切面,就是忽略掉表面上的功能点,而关注测试对象的某一个面。比如我们的内部管理系统提供了销售录入导入、注册录入导入等功能,从菜单划分上对应了七八个功能点。但这些功能处理后台有个共同的处理项就是授权记录的生成,这时我们就可以把“授权记录生成”单独拿出来做一个测试项,而在其它测试项中涉及这一部分的用例就不必再一一撰写。此外象一些界面共通的操作用例单独写成一页,也是一种特定切面