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 ...
随机推荐
- Python学习(一):编写购物车
1.购物车流程图: 2.代码实现: #!/usr/bin/env python #coding=utf-8 ChoiceOne =''' 1.查看余额 2.购物 3.退出 ''' ChoiceTwo ...
- MySQL主从复制原理以及架构
1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的 数据复制到其它主机(slaves)上,并 ...
- 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法
前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...
- ant安装和验证
1.下载apache-ant-1.9.6 2.D:\software\apache-ant-1.9.6 3.配置环境变量 在系统变量path的最后面添加D:\software\apache-ant-1 ...
- Netty之多用户的聊天室(三)
Netty之多用户的聊天室(三) 一.简单说明 笔者有意将Netty做成一个系列的文章,因为笔者并不是一个善于写文章的人,而且笔者学习很多技术一贯的习惯就是敲代码,很多东西敲着敲着就就熟了,然后再进行 ...
- SecureCRT 历史版本下载
最近在使用SecureCRT时,存在网络卡顿现象,然而.同事的SecureCRT工具却一点都不卡,我的SecureCRT是比较老的版本6,同事使用的是版本7,所以就更换下自己的SecureCRT版本. ...
- JAVA的命名方式 ,JAVA的第一个打印时间的程序
本文内容来自:Java的命名方式 ,Java的第一个打印时间的程序 – Break易站 1. Java的命名方式 Java采用了一种全新的方法来避免上述所有问题·为了给一个类库生成不会与其他名字混淆的 ...
- [Spark性能调优] 第三章 : Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕
本課主題 Sorted-Based Shuffle 的诞生和介绍 Shuffle 中六大令人费解的问题 Sorted-Based Shuffle 的排序和源码鉴赏 Shuffle 在运行时的内存管理 ...
- vim 查找的技巧
vim查找时如果有多个特殊字符需要转义容易出错还繁琐. 要确保要查找的 URL 仍保存在寄存器 u 中.然后,我们输入 / 或者 ? 调出查找提示符,二者均能正确工作.最后,要依次输入原义开关 \V ...
- git应用套路
git应用套路 一. 配置git别名 1.通过控制台命令vim ~/.gitconfig打开配置页面 2.配置如下内容: [user] name = your Name email = your E- ...