Spring的IOC分析(一)
我们学习Spring之前需要对23种java的设计模式的9种有一定的理解,设计模式为了解耦,Spring也是在解耦的方向上设计的,所以设计模式要理解一下,它当中用到了很多。
- 单例模式(写法很多钟,7种中知道常用的两种左右就可以了)
- 工厂模式(简单工厂,工厂方法,抽象工厂)
- 代理模式(jdk的动态代理,CGLIB的代理)
- 委派模式(跟代理模式类似,区别是这个只看到结果出来)
- 原型模式(一个克隆对象的方法,只克隆数据类型属性叫浅拷贝,克隆对象信息的叫深拷贝)
- 门面模式(一个大堂经理的职位,做事的不是他,他是将不同的情况的业务分到对应的业务窗口去执行,目的是扩展)
- 策略模式(用不同的方式去实现,但是不影响最终的结果,比如CompareTo的这个方法的比较,小的数据返-1,相等返0,大于返1,至于怎么比较的我们不知道)
设计模式按照理解的写了7个放在github上了, 地址:https://github.com/zy93xy/PatterDesignWorkspace
面试官有时候会问你:“讲讲你所理解的IOC”,这时你如果按照千篇一律的方式去回答:“它是将对象的创建的控制权交给了我们的Spring的Ioc容器”,肯定没错,但是这只是一种云云亦云的说法,面试官都听起茧了,所以我们要从3个方面去说明清楚它。
背景:在没有Spring的管理时,我们要写服务层的调用时,就是new一个的方式,都是接口的引用去new响应的接口实现的服务的,所以我们常规的这样在管理这样的大量的类的实例时会有很多资源浪费,同时让我们写了很多耦合度比较高的代码,实现的服务的接口一旦达到上百的个,请问你又怎么能记得住呢。这时,Spring的IOC容器就出来解决了耦合性开发的问题,向BeanFactory拿到Bean的实例,当中的处理方式就不用知道怎么会是,我们只管拿到使用就可以了,解放了业务开发的代码量,做了一次优秀的封装。
引入:我们可以把Spring的编程的核心叫做BOP(面向bean的编程思想)编程,创建对象(bean)和依赖调用的原本是需要在调用类里实现的,控制反转把所有的这种反复的事交给了Ioc容器来做,而且还是必须容器才行。容器在这里做什么?起了一个什么样的作用呢?
Ioc:从我们代码上可以有三种方式进行注入:①set方式,②直接赋值,③构造注入;在注入前我们需要对该bean组件进行获取bean,而getBean()方法又是BeanFacotry定义的规范,接着BeanDefinition进行还原处理,定位到实例bean,加载,初始化,注册,注入完成控制反转和依赖注入的。当下代码是启动Spring中的Ioc获取了bean的实例的开始
ApplicationContext appContext = new ClassPathXmlApplicationContext("classpath:META-INF/spring/applicationContext-common.xml");
ApplicationContext appContext=appContext.getContext();
ProjectServiceFacade projectServiceFacade=(ProjectServiceFacade)appContext.getBean("projectService");
//projectServiceFacade使用就可以调用方法了
在Ioc分析二中将了解整个的一个过程。
Spring的IOC分析(一)的更多相关文章
- Spring的IOC分析(二)源码
承接上节继续,分析Ioc的工作原理,在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起(同时一个叫DI"依赖注入"或DL"依赖查找" ...
- 最佳新秀SSH(十三)——Spring集装箱IOC分析和简单的实现
时间最近一段时期,"集装箱"这个词一直萦绕在我的耳边,连吃饭.睡在我的脑海里蹦来蹦去的. 由于这几天的交流时间.讨论,对于理解容器逐渐加深. 理论上的东西终归要落实到实践,今天就借 ...
- 【spring源码分析】IOC容器初始化(总结)
前言:在经过前面十二篇文章的分析,对bean的加载流程大致梳理清楚了.因为内容过多,因此需要进行一个小总结. 经过前面十二篇文章的漫长分析,终于将xml配置文件中的bean,转换成我们实际所需要的真正 ...
- 【spring源码分析】IOC容器初始化(一)
前言:spring主要就是对bean进行管理,因此IOC容器的初始化过程非常重要,搞清楚其原理不管在实际生产或面试过程中都十分的有用.在[spring源码分析]准备工作中已经搭建好spring的环境, ...
- 【spring源码分析】IOC容器初始化(二)
前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...
- 【spring源码分析】IOC容器初始化(三)
前言:在[spring源码分析]IOC容器初始化(二)中已经得到了XML配置文件的Document实例,下面分析bean的注册过程. XmlBeanDefinitionReader#registerB ...
- 【spring源码分析】IOC容器初始化(四)
前言:在[spring源码分析]IOC容器初始化(三)中已经分析了BeanDefinition注册之前的一些准备工作,下面将进入BeanDefinition注册的核心流程. //DefaultBean ...
- 【spring源码分析】IOC容器初始化(七)
前言:在[spring源码分析]IOC容器初始化(六)中分析了从单例缓存中加载bean对象,由于篇幅原因其核心函数 FactoryBeanRegistrySupport#getObjectFromFa ...
- 【spring源码分析】IOC容器初始化(十)
前言:前文[spring源码分析]IOC容器初始化(九)中分析了AbstractAutowireCapableBeanFactory#createBeanInstance方法中通过工厂方法创建bean ...
随机推荐
- NET Framework 版本和依赖关系
原文:https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/versions-and-dependencies 每个版本的 ...
- uptime 命令详解
作用: 打印系统总共运行了多长时间和系统的平均负载. uptime 命令可以显示的信息依次为: 现在时间, 系统已经运行时间, 目前登录用户个数, 系统1,5,15 分钟内的平均负载 实例: up ...
- cd 命令详解
cd 命令 作用: cd 用来切换目录,目录表示法可为绝对路径或相对路径, 若目录名称省略,则变换至使用者的登陆目录. ~ 可表示为家目录,.为当前目录,..为上级目录 语法: cd (选项)(参数 ...
- 2.移植uboot-添加2440单板,并实现NOR、NAND启动
上章分析了uboot启动流程后,接下来便来配置新的单板,实现nor.nand启动 1.首先在uboot里新建单板2440 : cd board/samsung/ cp smdk2410 smdk244 ...
- Django2.0中文文档
title: Django2.0中文文档 tags: Python,Django,入沐三分 grammar_cjkRuby: true --- Django2.0版本已经发布了,我们先来看一个图片 从 ...
- 伽罗瓦域(有限域)GFq^12上元素的1→2→4→12塔式扩张(1)------第一次扩张
伽罗瓦域是抽象代数下的域论分支中的内容,这部分想必很多人都比较熟悉,此处不再赘述. 最近,国密算法中的SM2和SM9已经成为国际标准,其中SM9算法在椭圆曲线离散对数难题的基础上,添加了若干个双线性配 ...
- 测试BUG记录模板(供参考)
文档说明如下: Bug严重程度: A-崩溃的:由于程序所引起的死机.非法退出.死循环:数据库发生死锁:因错误操作导致的程序中断:主要功能错误:造成数据破坏丢失或数据异常:数据库连接错误:数据通讯错误. ...
- Python爬虫——城市公交、地铁站点和线路数据采集
本篇博文为博主原创,转载请注明. 城市公交.地铁数据反映了城市的公共交通,研究该数据可以挖掘城市的交通结构.路网规划.公交选址等.但是,这类数据往往掌握在特定部门中,很难获取.互联网地图上有大量的信息 ...
- Mvc项目部署IIS报错:没有为请求的URL配置默认文档,并且没有在服务器设置目录浏览
问题原因: 1.iis是在安装完.net framework 之后才安装的,需要进行iis注册,开始--运行--cmd,打开命令行提示符,输入命令如下 C:\Windows\Microsoft.NET ...
- InnoDB锁机制
1. 锁类型 锁是数据库区别与文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问. InnoDB使用的锁类型,分别有: 共享锁(S)和排他锁(X) 意向锁(IS和IX) 自增长锁(AUTO-I ...