切面

spring boot 从开发到上线(三)—AOP 异常监控、上报

风格不统一 提交于 2019-12-03 03:56:34
在做这个项目的期间,看到一篇很有启发性的文章 《程序员你为什么这么累》 。对于初级程序员来说,拿到需求,第一反应是用什么技术来尽快的完成任务,这本身并没有问题。但长此以往,不仅被需求的更改搞得疲惫不堪,更被重复的工作消磨了激情。如果你也有类似的烦恼,不妨看看此文,结合日常工作,体会下文中提到的 先有思想再有技术 。 ~~~~~~~~ ge ge ge ge ~~~~~~~~~~~ 正文: 到目前为止,我们的项目线上运行良好,但每个人都知道,它一定有 bug。当异常产生,就需要及时去修复。然而我们不可能实时的查看日志,更不能寄期望于用户反馈。怎么办?我们需要程序替我们监控异常,一旦发生异常及时通知相关人员。 spring aop 可以帮助我们实现这个任务。(先有思想再有技术) 一看就懂的 AOP 初学 AOP,一定会被它复杂的概念迷惑,今天我们就来捋一捋,说点人话。 什么是 AOP ? AOP: Aspect Orient Programming,即面向切面编程。 面向切面编程: 抽取重复代码,在运行时将它们动态的植入到业务方法上。 作用: 让关注点代码与业务代码分离 关注点: 即业务中的重复代码 切面: 关注点代码行程的类,也叫切面类 切入点: 目标业务对象方法,动态植入切面代码 通过 切入点表达式 ,指定拦截哪些类的哪些方法;给指定的类在运行时,植入切面类代码 切入点表达式:

Spring学习(1)——快速入门

浪子不回头ぞ 提交于 2019-12-03 01:58:01
认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的 成功来源于理念,而不是技术本身 ,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程) 。 什么是 Spring: Spring 是一个 轻量级的 DI / IoC 和 AOP 容器的开源框架 ,来源于 Rod Johnson 在其著作 《Expert one on one J2EE design and development》 中阐述的部分理念和原型衍生而来。 Spring 提倡以 “最少侵入” 的方式来管理应用中的代码,这意味着我们可以随时安装或者卸载 Spring 适用范围:任何 Java 应用 Spring 的根本使命:简化 Java 开发 尽管 J2EE 能够赶上 Spring 的步伐, 但 Spring 并没有停止前进 , Spring 继续在其他领域发展,而 J2EE 则刚刚开始涉及这些领域,或者还没有完全开始在这些领域的创新。 移动开发、社交 API 集成、NoSQL 数据库、云计算以及大数据 都是 Spring 正在涉足和创新的领域。Spring 的前景依然会很美好。 Spring 中常用术语: 框架 :是能 完成一定功能 的 半成品 。 框架能够帮助我们完成的是:

UE4-Component-实时切割模型

匿名 (未验证) 提交于 2019-12-03 00:37:01
需要启用 StaticMesh 中的 AllowCPUAccess 属性。 新建ActorBP,添加Procedural Mesh Component,调用 CopyProceduralMeshfromStaticMeshComopnent ProceduralMeshComponent 有 Slice Procedural Mesh 函数,这个函数可以将Procedural Mesh进行切割,并且生成另外的一半模型块。 参数介绍: Plane Position : 世界坐标系下该平面的中心位置 Plane Normal : 世界坐标系下该平面的发现 Create Other Half : 是否将切下来的那一块模型独立出来 Cap Option No Cap : 切面不缝合,模型中空 Create New Section for Cap : 切面缝合,使用自定义的材质 Use Last Section for Cap : 切面缝合,使用与模型一样的材质 Cap Material : 如果 Cap Option 是 Create New Section for Cap 时自定义的材质 在 UKismetProceduralMeshLibrary::SliceProceduralMesh() 函数中,可以看到它实现的方法如下: SliceProceduralMesh(plane) m

在Spring AOP切面中启用新事务

匿名 (未验证) 提交于 2019-12-03 00:37:01
在工作中有一个在切面中需要记录一下操作日志的需求,而且要求这些操作日志要存入数据库,并且无论业务层有什么异常,日志照常记录,那就不能沿用业务层的事务,而是需要新启一个事务了。 sping的声明式事务就是靠AOP来实现的,一般事务都在业务层中启用,那如果要在AOP的逻辑中启用一个新的事务要怎么做呢?比如下面的例子: //定义一个切点,这里指com.lidehang.remote包下所有的类的方法 @Pointcut ( "execution(public * com.lidehang.remote..*.*(..))" ) public void remote (){} //切点指定的方法执行完返回后调用 @AfterReturning ( returning = "ret" , pointcut = "remote()" ) public void doAfterReturning ( JoinPoint joinPoint , Object ret ) throws Throwable { //一些切面逻辑,包含了数据库操作,为了即便业务层的原事务回滚也不会影响切面中的数据库操作,需要启用新的事务 ... } 经过我的测试,通过在doAfterReturning方法上加上注解@Transactional,并指定传播行为是REQUIRES_NEW依然不行。因为

IoC和AOP的实际应用

匿名 (未验证) 提交于 2019-12-03 00:34:01
Spring IoC 控制反转:也称为依赖注入,是面向对象编程中的一种设计理念,用来降低程序代码之间的耦合度。 // 通过ClassPathXmlApplicationContext实例化Spring的上下文 ApplicationContext context = new ClassPathXmlApplicationContext ( " app.xml " ); // 通过ApplicationContext的getBean()方法,根据id来获取Bean的实例 person p = ( person ) context . getBean ( " say " ); p . say (); ApplicationContext是一个接口,负责读取Spring配置文件。ClassPathXmlApplicationContext是ApplicationContxet接口的实现类,用于从classpath路径中读取Spring配置文件。 切面编程的基本概念:  1.切面:一个模块化的横切逻辑,可能会横切多个对象   2.连接点:程序执行中的某个具体的执行点。   3.增强处理:切面在某个特定连接点上执行的代码逻辑.。   4.切入点:对连接点的特征进行描述,可以使用正则表达式。增强处理和一个切入点表达式相关联,并在与这个切入点匹配的某个连接点上运行   5.目标对象

Spring-AOP

匿名 (未验证) 提交于 2019-12-03 00:34:01
AOP(面向切面编程):核心 切面、通知、切入点、目标对象、代理对象、织入等概念 切面:方面(日志、事务、安全验证)的实现,在实际应用中通常是存放方面实现的普通java类,要在配置中通过<bean>标记指定。 通知:是切面的具体实现(前置通知、后置通知、环绕通知、异常通知和最终通知) 切入点:定义通知应该织入到那些连接点上 目标对象:要织入切面的对象 代理对象:将通知应用到目标对象后,被动态创建的对象 织入:将切面应用到目标对象 面向编程的实现 ①基于代理类ProxyFactoryBean的aop的实现 ②基于Schema的aop的实现 ③基于@AspectJ注解的aop的实现 文章来源: Spring-AOP

Spring面向切面编程(AOP)

匿名 (未验证) 提交于 2019-12-03 00:32:02
AOP术语 通知(Advice) 定义一个方法的业务逻辑 Spring切面可以应用5种类型的通知 前置通知(Before):在目标方法被调用之前调用通知功能; 后置通知(After):在目标方法完成之后调用通知,此时不会关 心方法的输出是什么; 返回通知(After-returning):在目标方法成功执行之后调用通 知; 异常通知(After-throwing):在目标方法抛出异常后调用通知; 环绕通知(Around):通知包裹了被通知的方法,在被通知的方 法调用之前和调用之后执行自定义的行为。 连接点(Join point) 在方法级别上调用还是在其他,Spring只支持方法级别的连接点 切点(Poincut) 在目标类那些方法需要做AOP,如以update*开头的方法 execution(* com.anyb.service. Impl.update (..)) 切面(Aspect):通知的集合类 Spring提供了4种类型的AOP支持 : 基于代理的经典Spring AOP; 纯POJO切面; @AspectJ注解驱动的切面; 注入式AspectJ切面(适用于Spring各版本) Spring借助AspectJ的切点表达式语言来定义Spring切面 arg() 限制连接点匹配参数为指定类型的执行方法 @args() 限制连接点匹配参数由指定注解标注的执行方法

Spring中AOP详解和总结

匿名 (未验证) 提交于 2019-12-03 00:32:02
在上一篇中,介绍了使用代理来实现日志的记录,该方法在平时工作中不易于使用,因为要有一定的设计模式的基础。下面就来介绍下Spring的一个非常核心的概念AOP,即面向切面编程。 为了理解AOP,必须先了解AOP的相关术语: 1、通知(Advice): 在AOP中,切面的工作被称为通知。通知定义了切面“是什么”以及“何时”使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。 Spring切面可以应用5种类型的通知: (1)前置通知(Before):前置通知, 在方法执行之前执行; (2)后置通知(After):后置通知, 在方法执行之后执行 ; (3)返回通知(After-returning):返回通知, 在方法返回结果之后执行; (4)异常通知(After-throwing):异常通知, 在方法抛出异常之后; (5)环绕通知(Around):环绕通知, 围绕着方法执行; 连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加行为。 如果说通知定义了切面“是什么”和“何时”的话,那么切点就定义了“何处”。比如我想把日志引入到某个具体的方法中,这个方法就是所谓的切点。 切面是通知和切点的结合。通知和切点共同定义了切面的全部内容―――它是什么,在何时和何处完成其功能。

纯代码配置`SSM`框架 (一)

匿名 (未验证) 提交于 2019-12-03 00:22:01
SSM 框架是由三套框架整合起来的。分别是 Spring 、 Spring MVC 、 Mybatis 。 Spring 是一个控制反转( IoC )和面向切面( AOP )的容器框架,适用于任何 Java 应用。 控制反转( IoC )是指对象的创建权交给 Spring 容器,其作用是实现了程序的解耦合,对象创建的控制权不是 使用者 ,而是 框架 或者 容器 。例如:想要调用类里面一个非静态方法,首先要通过 new 实例化一个对象,然后通过这个实例调用相关的方法 method 。但是在 Spring 中, Spring 创建对象的过程,不是在代码里面实现的,而是交给 Spring 来进行配置实现的,其基本原理就是 XML配置文件+SAX解析+工厂设计模式 ; OOP 技术,允许开发者定义纵向的关系,但并不适合定义横向的关系。 AOP 技术,将那些影响了多个类的公共行为封装到一个可复用模块,这个就是所谓的 切面(Aspect) 。 切面 是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。最常见的使用到 AOP 技术就是日志功能。 连接点( Joinpoint ):被拦截到的点可能是 字段 、 构造器 、或者 方法 。 Spring 只支持方法类型的连接点。 横切关注点:对哪些方法进行拦截