aop

AOP和spring AOP学习记录

我与影子孤独终老i 提交于 2020-03-09 16:10:45
AOP基本概念的理解 面向切面AOP主要是在编译期或运行时,对程序进行织入,实现代理, 对原代码毫无侵入性,不破坏主要业务逻辑,减少程序的耦合度。 主要应用范围: 日志记录,性能统计,安全控制,事务处理,异常处理等等 名词性概念 切面(Aspect) 通常是一个类,在里面可以定义切入点和通知,即 切面=切入点+通知 。 连接点(Joint Point) 被拦截到的点,因为 Spring 只支持方法类型的连接点,所以在 Spring 中连接点指的就是被拦截的到的方法,实际上连接点还可以是字段或者构造器。 切入点(Pointcut) 对连接点进行拦截的定义。 通知(Advice) 拦截到连接点之后所要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类。 AOP 代理 AOP 框架创建的对象,代理就是目标对象的加强。Spring 中的 AOP 代理可以使 JDK 动态代理,也可以是 CGLIB 代理,前者基于接口,后者基于子类。 织入 (Weaving) 把切面加入到对象,并创建出代理对象的过程。 动态代理 在运行期间生成对象进行代理, spring AOP就是动态代理。 静态代理 自己编写代理对象,在编译器织入, AspectJ就是在编译期间进行织入,从而减少对运行时效率的影响。 SpringAOP 根据对象是否是实现类选择代理的方法 如果要代理的对象实现了接口,spring

Spring MVC

☆樱花仙子☆ 提交于 2020-03-09 05:00:55
Spring IOC/DI IOC:控制反转(Inverse Of Control) DI:依赖注入(Dependency Injection) Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象 DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。 AOP AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务 所谓的周边功能,比如性能统计,日志,事务管理等等 周边功能在Spring的面向切面编程AOP思想里,即被定义为切面 在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发 注解 拦截器 来源: CSDN 作者: 冰原狼 链接: https://blog.csdn.net/qq_38025939/article/details/104719822

Spring:Spring-AOP简介

寵の児 提交于 2020-03-09 02:16:25
什么是SpringAOP? 将一些相关的编程方法,独立提取出来,独立实现,然后动态地将代码切入到类的指定方法、指定位置上的编程方式就是AOP( 面向切面编程 )。 讲解一下AOP中的相关概念 Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。 Joint point(连接点): 表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。 Pointcut(切点): 表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。 Advice(增强): Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。 Target(目标对象): 织入 Advice 的目标对象.。 Weaving(织入): 将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程 实例: 接口: package com.java.test6; /** *

Spring中的AOP是什么?

旧时模样 提交于 2020-03-08 23:12:29
AOP :面向切面编程 在软件工程领域有一个概念: 关注点分离 ,不同的问题交给不同的部分去解决。 AOP其实就是这个思想。 怎么理解呢? 例如我们写业务代码的时候还需要考虑日志、缓存..等通用的功能。这些通用功能的实现就是所谓的切面( Aspect ),当业务代码和切面代码分离之后,开发者即可专注于业务逻辑处理,架构将变得高内聚低耦合。但是最终你编写的业务代码是需要这些被剥离出来的通用功能,又需要合在一起,这个过程就是切面被合并到业务中,这被称为 Weave。 如何织如呢? 涉及AOP的技术 1、 编译时织入 2、类加载时织入 3、运行时织入:spring采用此种方式,通过动态代理的方式,实现简单。 来源: CSDN 作者: MyySophia 链接: https://blog.csdn.net/MyySophia/article/details/104739884

easySpring | 手写SpringIOC、AOP

被刻印的时光 ゝ 提交于 2020-03-08 18:49:49
easySpring 在学到Java的Spring容器概念这里,我参考网上的博客和自己的理解实现了一个简易的Spring容器也就是这个项目。该项目分为 up 和 down 两部分。 up 模块只实现了最简单的IOC和AOP功能,两者并没有联系起来。 后来在 down 中实现了更复杂的IOC、AOP功能,并使两者能够很好地进行协作。 1. 简单的IOC和AOP的实现 1.1 简单的IOC容器实现 先从简单的 IOC 容器实现开始,最简单的 IOC 容器只需4步即可实现,如下: 加载 xml 配置文件,遍历其中的 标签 获取标签中的 id 和 class 属性,加载 class 属性对应的类,并创建 bean 遍历 标签中的 标签,获取属性值,并将属性值填充到 bean 中 将 bean 注册到 bean 容器中 代码结构如下: SimpleIOC // IOC 的实现类,实现了上面所说的4个步骤 SimpleIOCTest // IOC 的测试类 Car // IOC 测试使用的 bean Wheel // 同上 ioc . xml // bean 配置文件 容器实现类 SimpleIOC 的代码: package easySpring . up . ioc ; import org . w3c . dom . Document ; import org . w3c . dom .

spring——AOP原理及源码五【系列完】

为君一笑 提交于 2020-03-08 17:33:44
前情回顾:   在 上一篇 中,通过 wrapIfNecessary 方法,我们获取到了合适的增强器(日志方法)与业务类进行包装,最终返回了我们业务类的代理对象。      本篇我们将从业务方法的执行开始,看看增强器(日志方法)是怎么在方法执行的前后和发生异常时被调用的。以及在文章的最后总结整个AOP的执行流程。 调试的起点: 给测试方法打上断点,然后一直跳到下一个断点直到执行方法,如下   进入断点: 1 @Override 2 public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { 3 Object oldProxy = null; 4 boolean setProxyContext = false; 5 Class<?> targetClass = null; 6 Object target = null; 7 try { 8 if (this.advised.exposeProxy) { 9 // Make invocation available if necessary. 10 oldProxy = AopContext.setCurrentProxy(proxy); 11 setProxyContext

Spring-AOP

送分小仙女□ 提交于 2020-03-08 14:29:49
Spring-AOP 1. AOP 基本概念 显示中有一些内容并不是面向对象技术(OOP)可以解决的,比如事务处理。在 JDBC 代码中,最繁琐的问题就是无穷无尽的 try ... catch ... finally ... 语句 和 数据库资源关闭 的问题,而且代码会存在大量的重复,而你又不能不写。 一个正常执行的 SQL 的逻辑步骤如下: 打开通过数据库连接池获得数据库链接资源,并做一定的设置工作。 执行对应的 SQL 语句(通常是增删改),对数据进行操作。 如果 SQL 执行过程中发生异常,回滚事务。 如果 SQL 执行过程中没有发生异常,最后提交事物。 到最后的阶段,需要关闭一些连接资源。 参看上述流程,你会发现无论是执行什么具体的 SQL,流程都是一样的!即, 到了特定时刻一定会执行某个特定操作 ,并不因 SQL 的不同而不同 ! 在 OOP 中,模块化单元是『类』(Class),而在 AOP 中,模块化的单元是『 切面』(Aspect)。 AOP 最早由 AOP 联盟的组织提出的,并制定了一套规范。Spring AOP 遵守 AOP 联盟的规范。 Spring 的 AOP 的底层用到两种代理机制: JDK 动态代理 如果目标类遵循某个接口,Spring AOP 底层采用 JDK 方案生成代理对象 Cglib 动态代理 如果目标类不遵循任何接口,Spring AOP

Spring AOP

天大地大妈咪最大 提交于 2020-03-08 10:36:49
AOP AOP(Aspect Oriented Programming 面向切面编程)是一种通过运行期动态代理实现代码复用的机制,是对传统OOP(Object Oriented Programming,面向对象编程 )的补充。 AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加。AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来, 减少了系统中的重复代码 , 降低了模块间的耦合度 , 同时提高了系统的可维护性 。 实现AOP 1、添加jar类库 2、Spring配置文件添加< aop:aspectj-autoproxy/>,该配置作用:如果创建目标对象的目标类中的方法与AspectJ切面中切入点表达式匹配,则自动为该目标对象生成动态代理对象, 3、自定义一个@Aspect修饰的切面类——>将其创建的对象保存于Spring IOC容器——>自定义增强方法,增强方法也称为通知方法,指有@Before、@AfterRunning、@AfterThrowing、@After或@Around注解修饰的Java方法。 代码如下: package com.jd.aop ; import

Spring中AOP的理解

岁酱吖の 提交于 2020-03-08 07:49:36
1.AOP的概念 AOP(AspectOriented Programming,面向切面编程)指的是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下个程序动态统一添加功能的一种技术。AOP提供从一个角度来考虑程序结构以完善面向对象编程。它为开发人员提供了一种描述横切关注点的机制,并能够自动将横向关注点入到面向对象的软件系统中,从而实现了横切关注点模块化 AOP一般用于实现那些与业务无关,但是业务模块所共同调用的逻辑,例如异常拦截、事务管理、日志管理和权限控制等,AOP将这些代码封装起来,有利于减少系统的重复代码,降低模块间耦合度,提供可维护性。 AOP的基本概念:Aspect(切面):一个关注点的模块化,这个关注点可能会横切多个对象;Joinpoint(连接点):程序执行过程中某个特定的点,比如处理异常的时候;Advice(通知):在切面的某个特定连接点上执行的操作;Pointcut(切入点):匹配连接点的断言;Introduction(引入):用来给一个类型声明额外的方法和属性;Target Object(目标对象):被一个或多个切面所统治的对象;Weaving(织入):被切面连接到其他应用程序类型或对象上,并创建被通知的对象。 2.AOP的实现原理 AOP的核心实现与IoC一样依赖于 Java 的反射机制,但是与IoC不同的地方是,IoC用到的相关设计模式是工程模式

Spring AOP 实现原理

别等时光非礼了梦想. 提交于 2020-03-08 03:49:50
什么是AOP 它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。 使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。正如Avanade公司的高级方案构架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。” 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式