spring ioc原理分析

  • spring ioc 的概念
  • 简单工厂方法
  • spirng ioc实现原理

spring ioc的概念

ioc: 控制反转 将对象的创建由spring管理。比如,我们以前用new一个对象的方式自己创建一个对象,现在使用spring,不必自己new一个对象了,而是使用了另一种方式。

spring ioc 入门

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="helloService" class="demo1.HelloServiceImpl"></bean>
</beans>

HelloService.java

public interface HelloService {void sayHello();
}

HelloServiceImpl.java

public class HelloServiceImpl implements HelloService {private String info;public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}public void sayHello() {System.out.println("hello--" + info);}
}

使用spring创建对象

@Test// Spring开发public void demo2() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");HelloService helloService = (HelloService)applicationContext.getBean("helloService");helloService.sayHello();}

简单工厂方法

要想理解spring ioc的原理,必选要知道简单工厂方法
下面介绍简单工厂方法
​简单工厂模式是一种创建模式,创建模式是帮助我们更好地组织创建对象的代码,适应不同情况下的创建和初始化对象。

简单工厂方法的结构

举例

以上面的为例:
HelloService为抽象产品
HelloServiceImpl为具体产品
我们再写一个具体产品:
HelloServiceImpl2

public class HelloServiceImpl2 implements HelloService {public void sayHello() {System.out.println("hello-- HelloServiceImpl2");}
}

对于HelloService,我们以前的客户端调用是这样的:

@Test// 传统方式public void demo1() {// 造成程序紧密耦合.HelloService helloService = new HelloServiceImpl();helloService.sayHello();HelloService helloService2 = new HelloServiceImpl();helloService2.sayHello();}

我们是用new的方式创建一个对象,那如何用工厂方法创建对象?
首先,我们得有一个创建Bean的工厂类
BeanFactory //简单工厂

public class BeanFactory{public Object getHelloService(String beanName){if(beanName.equals("HelloService1")){return new HelloServiceImpl();} else if (beanName.equals("HelloService2")){return new HelloServiceImpl2();} else {return null;}}
}

这样,我们以后想获得HelloService就可以这样:
// 客户端调用

BeanFactory beanFactory = new BeanFactory();
HelloService helloService = (HelloService)beanFactory.getHelloService("HelloService1");

spirng ioc实现原理

spring ioc的实现原理,实际上就是简单工厂+sax解析xml+反射获取类对象
对于BeanFactory中,我们如下做:

public class BeanFactory{public Object getBean(String beanName){// 反射 + 解析配置文件return Class.forName("类名").new Instance();}
}

通过id,我们通过解析spring配置文件解析到id所对应的类,然后获取全名,通过反射创建类。这样,我们想获得bean,不需要修改代码,只需要新增类,然后再在配置文件中配置一下。

spring ioc原理分析相关推荐

  1. 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包

    浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...

  2. Spring Ioc原理解析

    Spring Ioc原理解析 IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦 ...

  3. Spring IOC 原理

    Spring IOC原理 IOC理解 自己写的简单的IOC容器 IOC的原理 定位.加载.注册 基于XML配置的IOC容器初始化 1.寻找入口 2.获取配置路径 3.开始启动 4.创建容器 5.载入配 ...

  4. Spring Ioc原理及解析

    IOC简介 IoC是Inversion of Control的缩写,多数书籍翻译成"控制反转",还有些书籍翻译成为"控制反向"或者"控制倒置" ...

  5. Spring IOC 原理解析

    Spring IOC 原理 ? IOC DI(依赖注入) **DI注入的几种方式** IOC容器 IOC原理 要想理解IOC,就需要知道一下IOC.DI 和IOC容器都是干什么的 IOC spring ...

  6. Spring事务原理分析-部分一

    Spring事务原理分析-部分一 什么事务 事务:逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败. 事务基本特性 ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要 ...

  7. Spring事务原理分析(一)--@EnableTransactionManagement 到底做了什么?

    目录 一.概述 二.事务的ACID属性 三.事务的隔离级别 四.事务的传播行为 五.Spring声明式事务环境搭建 六.@EnableTransactionManagement分析 七.AutoPro ...

  8. Spring:源码解读Spring IOC原理

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是Ioc/DI? IOC容器:主要是完成了 完成对象的创建和依赖的管理注入等. 先从我们自己设计这样一个视角来考虑: ...

  9. 解析Spring IOC原理——工厂模式与反射机制的综合应用

    (一)工厂模式 从一个例子开始讲起: 首先我们建立一个Chinese.java类,该类的sayHelloWorld(String name)方法,用中文对名为name的人问好,其内容如下: [java ...

最新文章

  1. Microbiome:高通量测序全面检测生物或环境样本的单细胞真核生物和寄生虫
  2. 七十、反转和合并链表、 链表有环的判断
  3. CVE-2018-4407 苹果设备远程溢出漏洞
  4. 通过pxe远程安装linux,通过PXE远程安装多台Linux系统
  5. HBuilder完成webApp入门(2)
  6. leetcode 88
  7. bzoj1038500AC!
  8. mongodb 存储过程 遍历表数据_mongodb查看数据库和表的信息
  9. LeetCode 37 解数独
  10. java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析
  11. C语言 static静态变量
  12. C#实现图像下一张上一张
  13. 基于python的计算基因组_【ROSALIND】【练Python,学生信】05 计算DNA序列GC含量
  14. python三维建模和cad比较_对比Revit和CAD三维建模的不同
  15. Spring Boot多数据源配置并通过注解实现动态切换数据源
  16. 第五章第六题(英里与千米之间的互换)(Conversion from mile to kilometer and kilometer to mile)
  17. python实现自动化查谁没交作业
  18. Linux下如何创建和取消软连接
  19. 2、MySQL数据库-表的修改
  20. 计算机创建管理员用户名和密码,如何给电脑设置管理员登录密码?

热门文章

  1. 记录Linux下的钓鱼提权思路
  2. 《C++游戏编程入门(第4版)》——1.12 习题
  3. OWA登录页面显示为英文而不是中文
  4. C++实现int与string之间的相互转换
  5. Linux下截取指定时间段日志并输出到指定文件
  6. form表单的action提交写到js中来,同时onclick事件也写在js中来。其action也可以通过ajax来提交的。...
  7. Android Broadcast Receiver
  8. html input不可编辑
  9. T-SQL WITH 分号问题
  10. JavaIO操作(1)字节流和字符流-1