我们学习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分析(一)的更多相关文章

  1. Spring的IOC分析(二)源码

    承接上节继续,分析Ioc的工作原理,在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起(同时一个叫DI"依赖注入"或DL"依赖查找" ...

  2. 最佳新秀SSH(十三)——Spring集装箱IOC分析和简单的实现

    时间最近一段时期,"集装箱"这个词一直萦绕在我的耳边,连吃饭.睡在我的脑海里蹦来蹦去的. 由于这几天的交流时间.讨论,对于理解容器逐渐加深. 理论上的东西终归要落实到实践,今天就借 ...

  3. 【spring源码分析】IOC容器初始化(总结)

    前言:在经过前面十二篇文章的分析,对bean的加载流程大致梳理清楚了.因为内容过多,因此需要进行一个小总结. 经过前面十二篇文章的漫长分析,终于将xml配置文件中的bean,转换成我们实际所需要的真正 ...

  4. 【spring源码分析】IOC容器初始化(一)

    前言:spring主要就是对bean进行管理,因此IOC容器的初始化过程非常重要,搞清楚其原理不管在实际生产或面试过程中都十分的有用.在[spring源码分析]准备工作中已经搭建好spring的环境, ...

  5. 【spring源码分析】IOC容器初始化(二)

    前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...

  6. 【spring源码分析】IOC容器初始化(三)

    前言:在[spring源码分析]IOC容器初始化(二)中已经得到了XML配置文件的Document实例,下面分析bean的注册过程. XmlBeanDefinitionReader#registerB ...

  7. 【spring源码分析】IOC容器初始化(四)

    前言:在[spring源码分析]IOC容器初始化(三)中已经分析了BeanDefinition注册之前的一些准备工作,下面将进入BeanDefinition注册的核心流程. //DefaultBean ...

  8. 【spring源码分析】IOC容器初始化(七)

    前言:在[spring源码分析]IOC容器初始化(六)中分析了从单例缓存中加载bean对象,由于篇幅原因其核心函数 FactoryBeanRegistrySupport#getObjectFromFa ...

  9. 【spring源码分析】IOC容器初始化(十)

    前言:前文[spring源码分析]IOC容器初始化(九)中分析了AbstractAutowireCapableBeanFactory#createBeanInstance方法中通过工厂方法创建bean ...

随机推荐

  1. php-redis 操作类 封装

    <?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止缓存穿透 * */ cla ...

  2. grep 与 find 简单命令

    在使用linux的时候,经常会用到查找文件或者查找文本,下面介绍两个命令. grep 使用方法: // 在当前目录下递归查找class字符串 grep "string" -r . ...

  3. win10下部署.Net Web项目到IIS10

    本问主要介绍如何将.Net Web项目部署到IIS10下面. 1.确保iis功能已开启 开启步骤如下:控制面板->程序 点击确定,ok,iis功能已开启. 2.打开iis,绑定站点到iis下面 ...

  4. [编织消息框架][JAVA核心技术]动态代理应用11-水平扩展实现

    由于示例,远程服务地址配置在properties文件,通过QMConfig类加载,最优方式是上节介绍过,放在共享内存上,只需要维护一份数据即可,如放在redis上 /** 服务地址<servic ...

  5. nginx+apache前后台搭配使用

    nginx apache都是web服务器 但是nginx更轻型对静态处理强大,而且nginx也是反向代理服务器,可以作转发 apache比较重型,非常稳定,处理动态WEB程序非常好,但是对静态处理就比 ...

  6. IE8下实现兼容rgba

    昨天遇到一个问题,要实现一个背景透明的效果,用CSS3用rgba()就能实现,即 background: rgba(0,0,0,.5); 但是要兼容到IE8,就发现没有透明效果,因为IE8不支持rgb ...

  7. Spring3.x企业开发应用实战读书笔记 —— 第三章IoC容器概述

    声明:    本篇博客绝大多数内容为<Spring3.x企业开发应用实战>一书原内容,所有版权归原书作者所有!,仅供学习参考,勿作他用! 3.2 相关Java基础知识 Java语言允许通过 ...

  8. 鸟哥的linux私房菜学习-(三)X Window与文本模式的切换

    通常我们也称文本模式为终端机接口, terminal 或 console喔!Linux默认的情况下会提供六个Terminal来让使用者登陆, 切换的方式为使用:[Ctrl] + [Alt] + [F1 ...

  9. 房上的猫:java中的包

    包 1.作用:  (1)包允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件  (2)防止命名冲突:    java中只有在不同包中的类才能重名  (3)包允许在更广的范围内保护类,数 ...

  10. C#语言和SQL Server 数据库处理

    ---恢复内容开始--- 第七章 用表组织数据 1:数据性分类: 1>实体完整性的约束:检验每行数据是否符合要求 检验每列数据是否符合要求 2>域完整性约束:给定列输入的有效性 3> ...