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 ...
随机推荐
- OpenStack运维(三):OpenStack存储节点和配置管理
1.对象存储节点维护 1.1 重启存储节点 如果一个存储节点需要重启,直接重启即可. 1.2 关闭存储节点 如果一个存储节点需要关闭很长一段时间,可以考虑将该节点从存储环中移除. swift-ring ...
- 前端MVC Vue2学习总结(五)——表单输入绑定、组件
一.表单输入绑定 1.1.基础用法 你可以用 v-model 指令在表单控件元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素.尽管有些神奇,但 v-model 本质上不过是语法糖, ...
- C#-判断Shift,Alt,Ctrl是否被按下,确定所按下的组合键
在创建接受用户击键的应用程序时,您还可能希望监视 SHIFT.ALT 和 CTRL 键等组合键.当一个组合键与其他键同时按下,或在单击鼠标的同时按下时,您的应用程序能够做出适当响应:字母 S 可能仅导 ...
- leetcode — word-break-ii
import java.util.*; /** * Source : https://oj.leetcode.com/problems/word-break-ii/ * * Given a strin ...
- UWP 手绘视频创作工具技术分享系列 - 文字的解析和绘制
本篇作为技术分享系列的第二篇,详细讲一下文字的解析和绘制,这部分功能的研究和最终实现由团队共同完成,目前还在寻找更理想的实现方式. 首先看一下文字绘制在手绘视频中的应用场景 文字是手绘视频中很重要的表 ...
- Head First设计模式之生成器模式
一.定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式是一种对象创建型模式. 二.结构 角色 Builder(抽象建造者):它为创建一个产品Product对象的 ...
- linux socket编程:简易客户端与服务端
什么是socket? socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来 ...
- angular4.0使用JSONP数据请求
ng4中有很多获取数据的API,为了满足跨域的需求,我选择JSONP模块: 应该有很多小伙伴遇到这个报错吧 injected script did not invoke callback: 下面我写个 ...
- Web App、Hybrid App与Native App
在这个App的时代,转战了前端,一直接触的都是pc, 离out不远了. 那么接下来,app是我接下来半年的重点,为什么是半年,因为时间不多了. 因为是前端,那么我的重心肯定是 Web App, Hyb ...
- 纯css提示效果 提示层
<!DOCTYPE HTML PUBLIC "-//W3C//DTD xHTML 1.0 Transitional//EN"><HTML> <HEAD ...