切面

谈谈Android AOP技术方案

假装没事ソ 提交于 2019-12-11 10:08:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 理解AOP 之前几篇文章我们详细介绍了AOP的几种技术方案,由于AOP技术复杂多样,实际需求也不尽相同,那么我们应该如何做技术选型呢? 本篇将会对现有的AOP技术做一个统一的介绍,尤其侧重在Android方向的落地,希望对你有所帮助,文中内容、示例大都来自工作总结,如有偏颇不妥,欢迎指正。 这里先统一一下基本名词,以便表述。 切面: 对一类行为的抽象,是切点的集合,比如在用户访问所有模块前做的权限认证。 切点: 描述切面的具体的一个业务场景。 通知(Advice)类型: 通常分为切点前、切点后和切点内,比如在方法前织入代码是指切点前。 AOP是一种面向切面编程的技术的统称,AOP框架最终都会围绕class字节码的操作展开,无论是对字节码的操作增删改,为方便描述,我们统称为 代码的织入 。 虽然AOP翻译过来叫面向 切面 编程,但在实际使用过程中,切面可能退化成了一个 点 ,比如我们想统计app的冷启动时间,这就非常具体了。如果我们用AOP的技术实现统计所有函数的耗时时间,自然能统计到类似启动这个阶段的时间。 从狭义来看实现AOP技术的框架必须是能将切面编程抽象成上层可以直接使用的工具或API,但当我们将 切面 降维后,最终面向的就是 切点 而已。换句话说,只要能将代码织入到某个点那这种技术就一定可以实现AOP

面试官会问关于spring的哪些问题?

依然范特西╮ 提交于 2019-12-10 23:49:01
什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 使用Spring框架的好处是什么? 轻量:Spring 是轻量的,基本的版本大约2MB 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开 容器:Spring 包含并管理应用中对象的生命周期和配置 MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA) 异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常 Spring由哪些模块组成? 以下是Spring 框架的基本模块: Core module Bean module Context module Expression Language module JDBC module ORM module OXM

aop 切面编程

∥☆過路亽.° 提交于 2019-12-10 17:51:04
aop的底层可以理解就是个动态代理 代理才是核心 基于注解使用aspectJ 主要的作用是 为 切面中的通知 能够作用到的目标类 生成代理 aop 底层的实现 是代理 <aop:aspectj-autoproxy/> 这个配置 可以为 我们写的切面类里面的通知所作用到的类 创建添加代理 而不用我们自己写了。 我们主要关注的就是切面了 切面编程 -> 切面 各种类 -> 通知 横切关注点模块化后在切面里面的称呼而已 来源: https://www.cnblogs.com/liubosong/p/12018043.html

Spring 面向切面编程(AOP)

南楼画角 提交于 2019-12-10 16:53:10
一,Spring的AOP简介   1.1 什么是AOP   1.2 AOP的优点   1.3 AOP的底层实现   1.4 AOP的动态代理技术     1.4.1 JDK动态代理     1.4.2 cglib动态代理   1.5 AOP的相关概念   1.6 AOP开发注意事项 二,基于XML的AOP开发   2.1 开发流程   2.2 快速开发   2.3 XML配置解析 三,基于注解的AOP开发   3.1 开发流程   3.2 快速开发   3.3 注解配置详情    一,Spring的AOP简介   1.1 什么是AOP   AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预 编译方式和运行期动态代理 实现程序功能的统一维护的一种技术。 在程序运行期间,在不修改源码的情况下对方法进行功能增强。 AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。   利用AOP可以 对业务逻辑的各个部分进行隔离 ,从而使得业务逻辑各部分之间的 耦合度降低 ,提高程序的 可重用性 ,同时提高了 开发的效率 。   1.2 AOP的优缺点   减少代码重复,降低耦合度,提高程序代码可重用性,提高开发效率。   1.3 AOP的底层实现   实际上,AOP 的底层是通过

springboot 注解实现AOP记录日志

巧了我就是萌 提交于 2019-12-10 15:26:17
AOP AOP为Aspect Oriented Programming的缩写,意为: 面向切面编程 ,通过 预编译 方式和运行期动态代理实现程序功能的统一维护的一种技术。在日常开发当中经常用来记录日志,方法跟踪、事务,权限等 切面方法说明: @Aspect -- 作用是把当前类标识为一个切面供容器读取 @Pointcut -- (切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式 @Before -- 标识一个前置增强方法,相当于BeforeAdvice的功能 @AfterReturning -- 后置增强,相当于AfterReturningAdvice,方法退出时执行 @AfterThrowing -- 异常抛出增强,相当于ThrowsAdvice @After -- final增强,不管是抛出异常或者正常退出都会执行 @Around -- 环绕增强,相当于MethodInterceptor 引入AOP依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 定义一个切面--TestAspect @Aspect @Component @Slf4j public class

Spring aop的实现

牧云@^-^@ 提交于 2019-12-10 04:47:37
对于aop的相关概念的认识 通知,新增处理: 已经定义好的与业务逻辑无关的一些东西,比如安全,日志,事务等。工作内容:通知定义了切面是什么以及什么时候使用。除了描述切面要完成的工 作,通知还解决何时执行这个工作,许多aop框架,包括spring都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链 连接点: 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在Spring AOP中,一个连接点 总是 代表一个方法的执行。 通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。简单来说就是可以接入通知的地方就算是连接点 切点(切入点): 在连接点的基础上定义切点,不一定所有的连接点都要接入通知,而接入通知的地方就叫切点 切面: 切点和通知的组合,通知声明了什么时候干什么,而切点声明了在哪里干 引入: 允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗 目标: 被通知的对象,也就是真正的业务逻辑。只专注于本身 织入: 把切面应用到目标对象来创建新的代理对象的过程,有三种织入的方式 目标对象: 项目原始的Java组件。 aop代理: AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。

Spring AOP

落爺英雄遲暮 提交于 2019-12-10 02:52:23
切面是与业务功能垂直的 AOP的实现方式: 1、预编译 AspectJ 2、运行期动态代理(JDK动态代理,CGLib动态代理) SpringAOP、JbossAop 概念 切面aspect:一个关注点模块化。比如事务切面。 连接点joinpoint:程序执行过程中特定的点。比如方法的开始。 通知Advice:在连接点上执行的动作 切入点PointCut:匹配连接点的断言。切点表达式 引入Introduction:在不修改类代码前提下,为类添加新的方法和属性 目标对象target Object:被一个或多个切面所通知的对象 AOP代理:Aop框架创建的对象。 织入weaving:把切面链接到其他的应用程序类型或者对象上 Advice类型 Before、After return、After throwing、After advice、Around、After After advice:当连接点退出的时候执行的通知(不论是正常返回还是异常退出) After时方法最后一条语句执行完执行,在return之后,在抛出异常之后 PointCut表达式 execution(public **(..)) 执行所有public方法 execution(* set*(..))  执行所有set开始的方法 execution(* com.xyz.service.AccountService.*(..)

Spring

余生长醉 提交于 2019-12-09 23:38:38
在简单的了解过AOP之后,被“面向方面编程”、“面向切面编程”、“切点”、“切面”这些术语搞的糊里糊涂,简单来说AOP是Aspect Origented Programing的简称,根据字面意思确实是面向切面编程,那么这个词到底又是什么意思? 按照软件重构的思想,如果一个类在多个方法或者类中出现相同的代码,我们就认为可以将这些代码提取到父类,但是有些代码例如在代码执行前得到执行开始时间,执行后获得结束时间,这样用来统计执行时间的代码可能隐藏在一堆杂乱的代码之中,这样的话通过父类继承的方式是无法实现的,这也就是AOP将要解决的问题。 我的通俗理解就是: 在某个方法执行前后动态的为其插入想要执行的方法或者代码。 AOP术语 连接点(Joinpoint): 特定点是进程执行的某个特定位置,如类开始初始化前,类初始化后,类的某个方法调用前/后,方法抛出异常后。一个类或一段代码拥有一些具有边界性质的特定点,这些代码中的特定点就被称为“连接点”。 Spring仅支持方法的连接点,即仅能在方法调用前,方法调用后,方法抛出异常时及方法调用前后这些进程执行点织入增强。 连接点由两个信息确定:一是用方法表示的进程执行点,二是用相对位置表示的方位。如在Test.foo()方法执行前的连接点,执行点为Test.foo(),方法为该方法执行前的位置。Spring使用切点对执行点进行定位

spring aop之父子容器

匆匆过客 提交于 2019-12-09 17:46:26
需求;项目对外提供接口,要求每个对外接口都要进行token认证。 解决办法:写一个token认证的工具类,在每个需要认证的接口方法开始的地方,调用工具类中的token认证方法。 问题:因为要满足指定条件才可以进行下一步,在接口中调用token认证的时候,要返回结果进行判断,不止是一行代码可以解决问题。 优化:使用aop 切面编程,在执行接口的内容之前,进行认证。通过注解的方式,织入到切点中。这样在需要进行认证的接口上只需要添加一个注解就可以token认证功能。 问题:基于Aspect注解实现该功能,在程序启动时,访问接口,直接进入接口,没有进入切面。 AuthController @RestController public class AuthController { @PostMapping("authentication") @TokenChecker public Result getToken(String username,String password){ return null; } } 切面类:execution 表达式没有任何问题。 @Aspect @Component public class TokenAspect {   //匹配指定类下的有指定注解的方法。只要在要切入的方法上加上注解就可以将该方法作为切入点。 @Pointcut("execution

Android面向切面编程(AOP)

喜你入骨 提交于 2019-12-09 14:07:05
Android面向切面编程(AOP) AOP简介 什么是AOP AOP术语 AOP与OOP区别 AOP的实现方式和原理 Android中使用AspectJ 配置环境 常用注解介绍 代码实现 其他 AOP简介 什么是AOP AOP(Aspect Oriented Programming),中译为 面向切面编程 ,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是函数式编程的一种衍生范型。AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高代码的灵活性和可拓展性。在Android中,AOP主要用于 日志记录,权限控制,性能统计,安全控制,事务处理,异常处理,热修复,埋点 等功能。 AOP术语 通知、增强处理(Advice) :就是你想要的功能,也就是上面说的日志、耗时计算等。 连接点(JoinPoint) :允许你通知(Advice)的地方,那可就真多了,基本每个方法的前、后(两者都有也行),或抛出异常是时都可以是连接点(spring只支持方法连接点)。AspectJ还可以让你在构造器或属性注入时都行,不过一般情况下不会这么做,只要记住,和方法有关的前前后后都是连接点。 切入点(Pointcut) :上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有十几个连接点了对吧