spring aop原理

Spring 中AOP及前后置增强案例

最后都变了- 提交于 2019-12-02 11:37:34
1、AOP 面向切面编程   面向切面编程的本质:面向切面编程,指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来。    1主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。    2主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。 2、AOP 原理 将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决 采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能。 3、AOP相关术语 1 增强处理类型 前置增强 :目标方法调用前 后置增强 :目标方法调用后 环绕增强 :前置+后置 异常抛出增强 :只有在目标方法抛出异常时才执行 最终增强 :finally 2 AOP的设计单元 术语名称 描述 切面(Aspect) 横切关注点而被模块化的类,称之为切面 通知(Advice) 切面要完成的工作,具体指代切面类中的某个方法 连接点(Join Point) 一个应用在执行的过程中能被插入切面的一个点 切点(Point Cut) 通配表达式,可以匹配一个或多个连接点 织入(Weaving) 将切面应用到目标对象的代理对象的过程 4、AOP案例 实现增强   (1)导入依赖     

Spring(2)IOC和AOP的基本用法

夙愿已清 提交于 2019-12-02 11:33:38
目录 一 IOC/DI 1 介绍 2 依赖注入的方式 3 Spring容器 4 IOC实现过程 1.容器启动阶段 2.Bean实例化阶段 二 AOP 1 AOP中的相关概念 2 srping中的动态代理 2.1 jdk动态代理 2.2 cglib 一 IOC/DI 1 介绍 反转资源获取的方向 . 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是 容器主动 地将资源 推送 给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式 DI(Dependency Injection) — IOC 的 一种实现手段 :即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接(容器向组件注入资源,方式有:属性注入、构造器注入 2 依赖注入的方式 Autowired/resource 等等 (可以再属性、构造器、sertter上标注) setter方法注入(xml中的利用property标签,实际是调用sertter方法) 构造器注入 静态/实例工厂(只找到xml里面的用法) 3 Spring容器 在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有在容器实例化后,

Spring AOP

↘锁芯ラ 提交于 2019-12-02 11:30:28
AOP面向切面编程    AOP(Aspect Oriented Programming),即 面向切面编程 ,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。   AOP技术恰恰相反, 它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面 。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来, 便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。   使用"横切"技术,AOP把软件系统分为两个部分: 核心关注点 和 横切关注点 。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似

消息中间之ActiveMQ

非 Y 不嫁゛ 提交于 2019-12-02 03:31:14
一、JMS (JAVA Message Service) 1、 JMS基本概念 JMS(JAVA Message Service,java消息服务)是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。 2、 JMS五种不同的消息正文格式 JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。 StreamMessage -- Java原始值的数据流 MapMessage--一套名称-值对 TextMessage--一个字符串对象 ObjectMessage--一个序列化的 Java对象 BytesMessage--一个字节的数据流 3、 JMS两种消息模型 3.1 点到点(P2P)模型 使用 队列(Queue) 作为消息通信载体;满足 生产者与消费者模式 ,一条消息只能被一个消费者使用,未被消费的消息在队列中保留直到被消费或超时。比如:我们生产者发送100条消息的话,两个消费者来消费一般情况下两个消费者会按照消息发送的顺序各自消费一半(也就是你一个我一个的消费

超详细回答:Spring常见面试题总结

元气小坏坏 提交于 2019-12-02 02:17:27
1、Spring是什么?   Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 3、Spring的AOP理解:   OOP面向对象,允许开发者定义纵向的关系

面向切面编程——理论

丶灬走出姿态 提交于 2019-12-01 19:55:50
在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录、事务控制及 权限控制等,然后才是编写核心的业务逻辑处理代码。当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心业务逻辑处理才那么几行,如 图6-4所示。方法复方法,类复类,就这样子带着无可奈何遗憾地度过了多少个春秋。这倒也罢,倘若到了项目的尾声,突然决定在权限控制上需要进行大的变动 时,成千上万个方法又得一一"登门拜访",痛苦"雪上加霜"。 如果能把图6-4中众多方法中的所有共有代码全部抽取出来,放置到某个地方集中管理,然后在具体运行时,再由容器动态织入这些共有代码的话,最起码可以解决两个问题: Java EE程序员在编写具体的业务逻辑处理方法时,只需关心核心的业务逻辑处理,既提高了工作效率,又使代码变更简洁优雅。 在日后的维护中由于业务逻辑代码与共有代码分开存放,而且共有代码是集中存放的,因此使维护工作变得简单轻松。 面向切面编程AOP技术就是为解决这个问题而诞生的,切面就是横切面,如图6-5所示,代表的是一个普遍存在的共有功能,例如,日志切面、权限切面及事务切面等。 下面我们以用户管理业务逻辑组件UserService的AOP实现过程(见图6-6)为例,深度剖析一下AOP技术的实现原理。AOP技术是建立 在Java语言的反射机制与动态代理机制之上的。业务逻辑组件在运行过程中

震惊!!!SSM居然是这样的!

北战南征 提交于 2019-12-01 19:30:20
SSM框架 SSM ( Spring+SpringMVC+MyBatis )框架集由 Spring 、 MyBatis 两个开源框架整合而成( SpringMVC 是 Spring 中的部分内容)。常作为数据源较简单的 web 项目的框架。 一、 Spring 部分    Spring 就像是整个项目中装配 bean 的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。    Spring 的核心思想是 IoC (控制反转),即不再需要程序员去显式地 `new` 一个对象,而是让 Spring 框架帮你来完成这一切。 1 、 Spring 的运行流程 第一步:加载配置文件 ApplicationContext ac = new ClassPathXmlApplicationCont ext("beans.xml"); , ApplicationContext 接口,它由 BeanFactory 接口派生而来,因而提供了 BeanFactory 所有的功能。配置文件中的 bean 的信息是被加载在 HashMap 中的,一个 bean 通常包括, id , class , property 等, bean 的 id 对应 HashMap 中的 key , value 呢就是 bean 第二步:调用 getBean 方法,

Spring 面试

梦想与她 提交于 2019-12-01 18:46:19
目录 Spring 面试问题 TOP 50   1. 一般问题   2. 依赖注入(Ioc)   3. Beans   4. 注解   5. 数据访问   6. AOP   7. MVC   8. 资料 Spring 面试问题 TOP 50 Spring Framework 现在几乎已成为 Java Web 开发的标配框架。那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢?不妨用本文的问题来检测一下。 本文内容主要翻译自 Top 50 Spring Interview Questions You Must Prepare In 2018 1. 一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? Version Feature Spring 2.5 发布于 2007 年。这是第一个支持注解的版本。 Spring 3.0 发布于 2009 年。它完全利用了 Java5 中的改进,并为 JEE6 提供了支持。 Spring 4.0 发布于 2013 年。这是第一个完全支持 JAVA8 的版本。 1.2. 什么是 Spring Framework? Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度。 它是轻量级、松散耦合的。 它具有分层体系结构,允许用户选择组件,同时还为 J2EE

spring4.0源码分析━━━(AOP实现)

无人久伴 提交于 2019-12-01 15:36:35
AOP的概念 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面)。这就让一些问题很简单化了,例如:开始我们实现了一些逻辑并上线了,现在客户又来了一个新的需求。要在每次交易之前统计下,或者记录下他们的交易简单资料。而你发现你其他模块可能正好有这部分的功能。那AOP就可以用得上了,使用AOP就可以在不修改源代码的情况下新增这些功能。就是在交易前这个切面,新装你的一些功能。这有点像拦截器和Filter。其实都是一个原理。前面说了解析xml和Bean的实例化。 而AOP的实现的话都是在我前面两篇spring3.0源码分析的基础上实现。其实AOP算是对自己本身IOC的实例,你学好弄懂AOP。基本IOC的也是懂了。但是这里的AOP也用到了一些新的东西,像Aspect,还有JVM的反射和动态代理。还有CGLIB这里也是有用到的。但是默认的实现是用JVM的动态代理。 AOP的实例 AOP用起来还是很简单的。就把xml配置好就算完工了。有Advisor和aspect两种方式来完成。如果是用Advisor的话需要实现AfterReturningAdvice,MethodBeforeAdvice,ThrowsAdvice等接口。而如果用aspect的话则不用继承或者实现其他的类,一个普通的类即可。 Java代码 public class LogAop

spring 最权威的知识点

别来无恙 提交于 2019-12-01 13:28:29
1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 3、Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系