Spring IOC/DI和AOP原理(转发:https://www.cnblogs.com/techroad4ca/p/5770073.html)
一 IOC/DI
1. 概念及原理
IOC: Inversion of Control(控制反转)是一种设计思想,就是容器控制应用程序所需要外部资源的创建和管理,然后将其反转给应用程序。对象及其依赖对象的创建及维护都不需要在应用程序中实现,将其交给IOC容器去管理。传统的开发中,我们自己在对象内部创建依赖对象并注入当前对象,完成依赖关系的维护;对于IOC而言,它强调是将主动变为被动,由IOC容器来负责依赖对象的创建和查找,由IOC容器来进行注入组合对象,我们只需要在相关的配置文件中维护对象之间的依赖关系即可。
DI: Dependency Injection,即“依赖注入”。其实IOC和DI本就是同一个概念的两种不同的表述,应用程序依赖容器提供的外部对象,容器将其依赖的外部资源在运行期注入到应用程序中;某个对象被调用时,其所依赖的对象由容器注入。
2. 优点
第一,资源集中管理,实现资源的可配置和易管理,降低对象关系维护的复杂度。
第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。
二 AOP
1. 概念和原理
AOP利用一种称为“横切”的技术,剖解开封装的对象内部,将那些影响多个类的公共行为封装到一个可重用模块,并将其名为方面(Aspect)。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑封装起来的部分。以便于减少系统的重复代码,降低模块间的耦合度,并有利于系统维护。
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点(业务逻辑)和横切关注点(通用逻辑,即方面)。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的特点是,其经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理,debug管理,性能检测等。AOP 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
2. 实现方式
实现AOP的技术,主要分为两大类:
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
3. 优点
①.横切关注点的代码都集中于一块,不再是分散在各个业务组件中,不会出现大量重复代码;
②.核心模块只关注核心功能的代码,与通用模块分离,模块间藕合度降低。
Spring IOC/DI和AOP原理(转发:https://www.cnblogs.com/techroad4ca/p/5770073.html)的更多相关文章
- Spring IOC/DI和AOP原理
一 IOC/DI 1. 概念机原理 IOC: Inversion of Control(控制反转)是一种设计思想,就是容器控制应用程序所需要外部资源的创建和管理,然后将其反转给应用程序.对象及其依赖对 ...
- spring IOC(DI)和AOP
软件152谭智馗 IOC(Inversion of Control,控制倒转)Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制. DI—Dependency Injecti ...
- Spring源码入门——DefaultBeanNameGenerator解析 转发 https://www.cnblogs.com/jason0529/p/5272265.html
Spring源码入门——DefaultBeanNameGenerator解析 我们知道在spring中每个bean都要有一个id或者name标示每个唯一的bean,在xml中定义一个bean可以指 ...
- 【转】Spring学习---Spring IoC容器的核心原理
[原文] Spring的两个核心概念:IoC和AOP的雏形,Spring的历史变迁和如今的生态帝国. IoC和DI的基本概念 IoC(控制反转,英文含义:Inverse of Control)是Spr ...
- spring IOC DI AOP MVC 事务, mybatis 源码解读
demo https://gitee.com/easybao/aop.git spring DI运行时序 AbstractApplicationContext类的 refresh()方法 1: pre ...
- Spring基础[IOC/DI、AOP]
一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...
- 黑马-Spring(IOC&DI) AOP
IOC(控制翻转) 概念 把对象的创建.初始化.销毁等工作交给spring容器来做 案例 环境 步骤 1. 写一个HelloWorld类 2. 写一个配置文件 把hello类放到spring容 ...
- 零基础学习java------37---------mybatis的高级映射(单表查询,多表(一对一,一对多)),逆向工程,Spring(IOC,DI,创建对象,AOP)
一. mybatis的高级映射 1 单表,字段不一致 resultType输出映射: 要求查询的字段名(数据库中表格的字段)和对应的java类型的属性名一致,数据可以完成封装映射 如果字段和jav ...
- spring+IOC+DI+AOP优点分析(一)
Spring是什么: Spring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于sprin ...
随机推荐
- JMX简单样例
一:创建maven项目,在pom.xml里面增加例如以下依赖 <dependency> <groupId>com.sun.jdmk</groupId> <ar ...
- (html)前端如何验证token的合法性来判断用户是否登录?
问题: (html)前端如何验证token的合法性来判断用户是否登录?描述: 1.我使用了JWT的方式,后端生成了一个token,将其返回给前端,前端获取到后每次请求接口都附带上这个token,后端来 ...
- error C2998: 'XXXXXXX' : cannot be a template definition 的可能原因。
从错误信息的字面意思可以看出来是 XXXXX 不能作为模板定义. 但是为什么不能,并没有说明,最后我翻阅各种资料,各种尝试后,发现往往可能是由于找不到模板函数的某个参数的定义而导致的. templat ...
- SQL数据库 CRUD
1.删除表 drop table +表名 2.修改表 alter table+表名+ add(添加)+列名+ int(类型) alter table+表名+ drop(删除)+column(列) ...
- UI-7-UIScrollView
#import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> { UIIm ...
- mongodb更新器
Name Description $inc Increments the value of the field by the specified amount. $mul Multiplies the ...
- 程序的记事本--log4net
你是否在遇到程序执行问题时常常百度?你是否在遇到执行错误时常常去询问别人?假设有那么是时候改变啦,对于一个Developer来说那是不专业的表现,专业的Developer都会首先查看程序的执行日志.先 ...
- ORA-00349: failure obtaining block size for '+fra_grp01_d
有一次恢复库以后,open时报错ORA-00349,例如以下.最后通过删除这个log group解决. SQL> alter database open resetlogs; alter d ...
- Eclipse中关于JRE System Library、Web App Libraries的疑惑
当我们在Eclipse中建立java的web工程时,会产生JRE System Library和Referenced Libraries,Web App Libraries不生成,下面会 简要说明一下 ...
- Java进阶03 IO基础(转载)
IO示例 下面是演示的文件file.txt Hello World! Hello Nerd! 先来研究一个文件读取的例子: import java.io.*;public class Test{ pu ...