spring aop原理

什么是AOP面向切面编程思想

為{幸葍}努か 提交于 2020-02-14 00:47:26
什么是AOP? 抽象:抽取特别像的东西。 如图,是一种横向的抽取,所以叫做面向切面。 下面两个图简单的体现了AOP的原理↓↓↓ 这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。 AOP是Spring提供的关键特性之一。AOP即面向切面编程,是OOP编程的有效补充。 使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。 从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。 这些系统性的编程工作都可以独立编码实现,然后通过AOP技术切入进系统即可。从而达到了 将不同的关注点分离出来的效果。 来源: https://www.cnblogs.com/yangf428/p/12305958.html

Spring框架的AOP编程,最通俗的语言解释,易懂易学

家住魔仙堡 提交于 2020-02-13 08:22:41
第七章:AOP技术 前言: AOP技术是根据动态代理设计模式进行的技术。动态代理技术分jdk动态代理和cglib动态代理 jdk动态代理特点: (1)继承java.lang.reflect.proxy类 (2)实现了真实类实现的接口 (3)真实类和代理类之间的关系是:他们都实现了相同的接口 cglib动态代理特点: 特点: (1)代理类是真实类的子类 注:本片文章主要理解AOP编程,至于动态代理技术不做过多介绍,有需要的话,可以留言,下篇文章可以进行讲解。 7.1:AOP原理概述 AOP:Aspect Oriented Programming,面向切面编程 传统形式,web项目执行流程: 缺点: (1) Bad Smell现象 ,指一些代码逻辑出现了在了不合适的层次。 例如:在service层有数据库的事务处理代码,不合乎规范 改进: AOP 编程: 本质上,属于动态代理设计模式 切面编程: 类似于在链式程序指定流程中,在service层处进行截断,此处的断层成为切面,此处的service处的程序运行为竖向,可以看作service层的强化操作。 概念: (1)Point(切点): 表示要对哪个方法进行增强 (2)Advice(通知): 表示额外增加的功能 (3)Aspect(切面): 就是代理对象,(切面+切点) (4)Weaving(织入): 将通知添加到切点中的操作

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 20:45:21
1、AOP思想 (1)在解决中文乱码的应用: 一般情况下如果在Servlet中要解决中文乱码问题需要在每一个Servlet中书写解决乱码的代码,但是,在运用了过滤器之后,就不再需要每一个Servlet中都写解决乱码的函数,减少了代码量。 AOP思想又叫做“面向切面编程”,过滤器就是面向每一个Servlet的,每一个Servlet都需要执行过滤器。 (2)动态代理: 代理类的那部分代码被固定下来了,不会因为业务的增加而逐渐庞大。 (3)拦截器: 不需要在每一个Action中书写拦截器的代码,只需要在Action需要的时候在配置文件中将相应的拦截器配置进去即可。 2、Spring中的AOP: Spring能够为容器中管理的对象生成动态代理对象。这样做是有好处的,如果把登录功能写在每一个业务中当需要修改代码的时候,就需要对每一个业务进行修改,但是,如果把登录功能抽取出来形成独立的模块,问题就迎刃而解了。 3、Spring实现aop的原理 (1)动态代理(优先使用):被代理对象必须要实现接口,才能产生代理对象,如果没有接口将不能实现动态代理。 假如登录需要分为登录前、登录、登录后三部分,也就是说登录部分是相同的代码,而登录前和登录后的代码根据用户的不同进行不同的操作,那么,登录接口可以这样写: public class LoginService { public void

spring源码解析之AOP原理(学习)

微笑、不失礼 提交于 2020-02-06 08:08:27
流程:   1)、传入配置类,创建ioc容器 2)、注册配置类,调用refresh()刷新容器; 3)、registerBeanPostProcessors(beanFactory);注册bean的后置处理器来方便拦截bean的创建; 1)、先获取ioc容器已经定义了的需要创建对象的所有BeanPostProcessor 2)、给容器中加别的BeanPostProcessor 3)、优先注册实现了PriorityOrdered接口的BeanPostProcessor; 4)、再给容器中注册实现了Ordered接口的BeanPostProcessor; 5)、注册没实现优先级接口的BeanPostProcessor; 6)、注册BeanPostProcessor,实际上就是创建BeanPostProcessor对象,保存在容器中; 创建internalAutoProxyCreator的BeanPostProcessor【AnnotationAwareAspectJAutoProxyCreator】 1)、创建Bean的实例 2)、populateBean;给bean的各种属性赋值 3)、initializeBean:初始化bean; 1)、invokeAwareMethods():处理Aware接口的方法回调 2)

Spring框架简单介绍

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

Spring框架简介

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

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 AOP

和自甴很熟 提交于 2020-02-04 04:15:20
  在前面的文章中已经和大家分享过关于spring IOC的知识,已经通过他的实现机制。我们都知道spring的两大核心:AOP(面向切面)和IOC(控制反转),本篇我们就一起学习一下AOP的知识的。   这里分享一个问题?当我们软件开发完成后,需要给每一个方法添加操作日志,我们怎么操作呢?我想最简单的方法就是在每一个方法的开始前将我们的日志逻辑加入,当然这是最直接的一种方法,但是他的缺点也是很明细,如果我们的方法有很多,添加这个日志逻辑就需要很多的工作量,显然这是一种不可取的方式。如何更好的解决这个问题呢?spring很好的帮我们处理了这个难点,通过切面编程,我们可以在我们需要的切面添加相应的业务逻辑已达到我们需要的效果。   接下来开始我们的内容,AOP的实现借助于JAVA的动态代理知识,我先通过动态代理的方式为大家介绍一下AOP的实现原理,以便大家更好的理解。   每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用。我们来看看InvocationHandler这个接口的唯一一个方法 invoke 方法: Object invoke(Object proxy,

Dubbo的使用及原理浅析.

随声附和 提交于 2020-02-04 04:10:19
Dubbo的使用及原理浅析. 前面几个博文中关于SSM 框架已经搭建完成, 这里来讲下项目中使用到的Dubbo以及自己了解到的关于Dubbo的一些知识. Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。 Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。 Dubbo能做什么? 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。 Spring集成