切面

Spring-AOP

有些话、适合烂在心里 提交于 2019-12-15 14:26:50
AOP 专题(注解版本) 代码库: https://gitee.com/chenscript/spring_ioc_aop_mvc_learning.git 1、AOP是什么? AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充. AOP 的主要编程对象是切面(aspect), 而切面模块化横切关注点. 2、AOP解决什么问题? 所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来, 便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 每个事物逻辑位于一个位置,代码不分散,便于维护和升级 业务模块更简洁了,只包含核心的业务代码 3、AOP如何实现? main() public class App { public static void main ( String [ ] args ) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ( MainConfigAOP . class ) ; MathCalculator mathCalculator =

Spring AOP(注入AsPectJ切面)

泄露秘密 提交于 2019-12-15 08:16:17
一、介绍 AOP(Aspect Oriented Programming)。 区别: OOP(Object Oriented Programming)和AOP(Aspect Oriented Programming)的区别:面向目标的区别,OOP面向名词领域,AOP面向动词领域。思想结构的区别,OOP是纵向结构,AOP是横向结构。注重方面的区别,OOP注重业务逻辑单元的划分,AOP偏重业务处理过程的某个步骤或阶段。 AOP功能: AOP面向切面编程是对OOP面向对象编程的一种补充。对业务逻辑各个部分进行隔离,降低功能之间的耦合度,提高代码复用率。主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理,权限管理、缓存管理、资源池管理等。 AOP代理: AOP实现的关键是代理模式,AOP代理分为静态代理和动态代理。静态代理指AspectJ,在编译阶段生成AOP代理类,也称编译时增强。动态代理在运行时用JDK动态代理和CGLIB在内存中临时生成AOP代理类,也称为运行时增强。 两种动态代理: Spring会使用JDK动态代理只支持实现类(实现了某个接口,委托类)的代理。否则,会使用CGLib来实现动态代理。CGLib动态代理是通过字节码底层继承被代理类(不能被final关键字所修饰)来实现。 CGLIB(Code Generator Library): 是一个强大的

spring boot使用aop切面测试

一个人想着一个人 提交于 2019-12-14 07:57:56
版权声明:本文为博主武伟峰原创文章,转载请注明地址http://blog.csdn.net/tianyaleixiaowu。 aop是spring的两大功能模块之一,功能非常强大,为解耦提供了非常优秀的解决方案。 现在就以springboot中aop的使用来了解一下aop。 一:使用aop来完成全局请求日志处理 创建一个springboot的web项目,勾选aop,pom如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>testaop</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name

Spring Aop基本讲解

ε祈祈猫儿з 提交于 2019-12-13 19:10:19
AOP的基本概念 @Aspect (切面): 通常是一个类,里面可以定义切入点和通知 JointPoint(连接点): 程序执行过程中明确的点,一般是方法的调用 Advice(通知): AOP在特定的切入点上执行的增强处理: @Before : 标识一个前置增强方法,相当于BeforeAdvice的功能 @After: final增强,不管是抛出异常或者正常退出都会执行。 @AfterReturning: 后置增强,似于AfterReturningAdvice, 方法正常退出时执行 @AfterThrowing: 异常抛出增强,相当于ThrowsAdvice @Around: 环绕增强,相当于MethodInterceptor Pointcut(切入点): 带有通知的连接点,在程序中主要体现为书写切入点表达式 AOP Proxy:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类。 Pointcut配置使用: 表示式(expression)和签名(signature) //Pointcut表示式 @Pointcut("execution(* com.savage.aop.MessageSender.*(..))") //Point签名 private void log(){}

高德APP全链路源码依赖分析工程

爷,独闯天下 提交于 2019-12-13 01:12:53
一、背景 高德 App 经过多年的发展,其代码量已达到数百万行级别,支撑了高德地图复杂的业务功能。但与此同时,随着团队的扩张和业务的复杂化,越来越碎片化的代码以及代码之间复杂的依赖关系带来诸多维护性问题,较为突出的问题包括: 不敢轻易修改或下线对外暴露的接口或组件,因为不知道有什么地方对自己有依赖、会受到影响,于是代码变得臃肿,包大小也变得越来越大; 模块在没有变动的情况下,发布到新版本的客户端时,需要全量回归测试整个功能,因为不知道所依赖的模块是否有变动; 难以判断 Native 从业务实现转变为底层支撑的趋势是否合理,治理是否有效; 这些问题已经达到了我们必须开始治理的程度了,而解决此类问题的关键在于需要了解代码间的依赖关系。 二、高德 APP 平台架构 为了消除一些疑惑,在讨论依赖分析的实现前,先简单说明一下高德 APP 的平台架构,以便对一些名词和场景有一些背景了解。 高德 APP 从语言平台上可以分为 4 个部分,JS 层主要负责业务逻辑和 UI 框架;中间有 C++层做高性能渲染(主要是地图渲染),同时实现了一些切面 API,这样可以在双端只维护一套逻辑了;Android 和 iOS 层主要作为适配层,做一些操作系统接口的对接和双端差异化的(尽可能)抹平。 这里的切面是指 JS 层与 Native/C++ 层的分界线,这里会实现一些切面 API,也就是 JS 层与

spring aop 注解方式配置及使用

情到浓时终转凉″ 提交于 2019-12-12 11:33:01
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 我们现在做的一些非业务,如:日志、事务、安全等都会写在业务代码中(也即是说,这些非业务类横切于业务类),但这些代码往往是重复,复制——粘贴式的代码会给程序的维护带来不便,AOP就实现了把这些业务需求与系统需求分开来做。这种解决的方式也称代理机制。 先来了解一下AOP的相关概念,《Spring参考手册》中定义了以下几个AOP的重要概念,结合以上代码分析如下: 切面(Aspect): 官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,在本例中,“切面”就是类TestAspect所关注的具体行为,例如,AServiceImpl.barA()的调用就是切面TestAspect所关注的行为之一。“切面”在ApplicationContext中<aop:aspect>来配置。 连接点(Joinpoint) :程序执行过程中的某一行为,例如,UserService

Spring-AOP

感情迁移 提交于 2019-12-11 20:29:53
一、AOP: Spring的问题: Spring的AOP解决: 示例: 二、Spring AOP AspectJ:java社区里最完整最流行的AOP框架。   在Spring2.0以上版本中,可以使用基于AspectJ注解或基于XML配置的AOP。 1)、首先加入jar包: com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar spring-aop-4.0.4.RELEASE.jar spring-aspects-4.0.4.RELEASE.jar commons-logging-1.1.3.jar spring-beans-4.0.4.RELEASE.jar spring-context-4.0.4.RELEASE.jar spring-core-4.0.4.RELEASE.jar spring-expression-4.0.4.RELEASE.jar 2)、在配置文件中加入AOP的命名空间 xmlns:aop="http://www.springframework.org/schema/aop" http://www.springframework.org/schema/aop http://www.springframework.org

【原创】003 | 搭上基于SpringBoot事务思想实战专车

醉酒当歌 提交于 2019-12-11 17:39:20
前言 如果这是你 第二次 看到师长,说明你在觊觎我的美色! 点赞+关注再看,养成习惯 没别的意思,就是需要你的窥屏^_^ 专车介绍 该趟专车是开往基于Spring Boot事务思想实战的专车,在上一篇 搭上SpringBoot事务源码分析专车 [1]中我们详细介绍了Spring Boot事务实现的原理,这一篇是基于上一篇的实战。 在实战之前,我们再次回顾下上篇文章讲解的重点: 后置处理器:对Bean进行拦截并处理 切面:由切点和通知组成 切点:用于匹配符合的类和方法 通知:用于代理处理 专车问题 如何利用后置处理器对Bean进行拦截并处理? 如何定义切面? 如何定义切点? 如何定义通知? 如何实现自动配置? 专车分析 实现是以Spring Boot为基础,需要添加如下依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>

Spring AOP中annotation 表达式

吃可爱长大的小学妹 提交于 2019-12-11 14:17:25
Aop 连接点(Joinpoint) 程序执行的某个特定位置,如某个方法调用前,调用后,方法抛出异常后,这些代码中的特定点称为连接点。简单来说,就是在哪加入你的逻辑增强 连接点表示具体要拦截的方法,上面切点是定义一个范围,而连接点是具体到某个方法 切点(PointCut) 每个程序的连接点有多个,如何定位到某个感兴趣的连接点,就需要通过切点来定位。比如,连接点--数据库的记录,切点--查询条件 切点用于来限定Spring-AOP启动的范围,通常我们采用表达式的方式来设置,所以关键词是范围 增强(Advice) 增强是织入到目标类连接点上的一段程序代码。在Spring中,像BeforeAdvice等还带有方位信息 通知是直译过来的结果,我个人感觉叫做“业务增强”更合适 对照代码就是拦截器定义的相关方法,通知分为如下几种: 前置通知(before):在执行业务代码前做些操作,比如获取连接对象 后置通知(after):在执行业务代码后做些操作,无论是否发生异常,它都会执行,比如关闭连接对象 异常通知(afterThrowing):在执行业务代码后出现异常,需要做的操作,比如回滚事务 返回通知(afterReturning),在执行业务代码后无异常,会执行的操作 环绕通知(around),这个目前跟我们谈论的事务没有对应的操作,所以暂时不谈 目标对象(Target) 需要被加强的业务对象

【原创】003 | 搭上基于SpringBoot事务思想实战专车

£可爱£侵袭症+ 提交于 2019-12-11 14:08:31
前言 如果这是你 第二次 看到师长,说明你在觊觎我的美色! 点赞+关注再看,养成习惯 没别的意思,就是需要你的窥屏^_^ 专车介绍 该趟专车是开往基于Spring Boot事务思想实战的专车,在上一篇 搭上SpringBoot事务源码分析专车 [1]中我们详细介绍了Spring Boot事务实现的原理,这一篇是基于上一篇的实战。 在实战之前,我们再次回顾下上篇文章讲解的重点: 后置处理器:对Bean进行拦截并处理 切面:由切点和通知组成 切点:用于匹配符合的类和方法 通知:用于代理处理 专车问题 如何利用后置处理器对Bean进行拦截并处理? 如何定义切面? 如何定义切点? 如何定义通知? 如何实现自动配置? 专车分析 实现是以Spring Boot为基础,需要添加如下依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>