spring ioc原理分析
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原理分析相关推荐
- 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包
浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...
- Spring Ioc原理解析
Spring Ioc原理解析 IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦 ...
- Spring IOC 原理
Spring IOC原理 IOC理解 自己写的简单的IOC容器 IOC的原理 定位.加载.注册 基于XML配置的IOC容器初始化 1.寻找入口 2.获取配置路径 3.开始启动 4.创建容器 5.载入配 ...
- Spring Ioc原理及解析
IOC简介 IoC是Inversion of Control的缩写,多数书籍翻译成"控制反转",还有些书籍翻译成为"控制反向"或者"控制倒置" ...
- Spring IOC 原理解析
Spring IOC 原理 ? IOC DI(依赖注入) **DI注入的几种方式** IOC容器 IOC原理 要想理解IOC,就需要知道一下IOC.DI 和IOC容器都是干什么的 IOC spring ...
- Spring事务原理分析-部分一
Spring事务原理分析-部分一 什么事务 事务:逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败. 事务基本特性 ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要 ...
- Spring事务原理分析(一)--@EnableTransactionManagement 到底做了什么?
目录 一.概述 二.事务的ACID属性 三.事务的隔离级别 四.事务的传播行为 五.Spring声明式事务环境搭建 六.@EnableTransactionManagement分析 七.AutoPro ...
- Spring:源码解读Spring IOC原理
2019独角兽企业重金招聘Python工程师标准>>> 一.什么是Ioc/DI? IOC容器:主要是完成了 完成对象的创建和依赖的管理注入等. 先从我们自己设计这样一个视角来考虑: ...
- 解析Spring IOC原理——工厂模式与反射机制的综合应用
(一)工厂模式 从一个例子开始讲起: 首先我们建立一个Chinese.java类,该类的sayHelloWorld(String name)方法,用中文对名为name的人问好,其内容如下: [java ...
最新文章
- Microbiome:高通量测序全面检测生物或环境样本的单细胞真核生物和寄生虫
- 七十、反转和合并链表、 链表有环的判断
- CVE-2018-4407 苹果设备远程溢出漏洞
- 通过pxe远程安装linux,通过PXE远程安装多台Linux系统
- HBuilder完成webApp入门(2)
- leetcode 88
- bzoj1038500AC!
- mongodb 存储过程 遍历表数据_mongodb查看数据库和表的信息
- LeetCode 37 解数独
- java axis2 jar_Java axis2.jar包详解及缺少jar包错误分析
- C语言 static静态变量
- C#实现图像下一张上一张
- 基于python的计算基因组_【ROSALIND】【练Python,学生信】05 计算DNA序列GC含量
- python三维建模和cad比较_对比Revit和CAD三维建模的不同
- Spring Boot多数据源配置并通过注解实现动态切换数据源
- 第五章第六题(英里与千米之间的互换)(Conversion from mile to kilometer and kilometer to mile)
- python实现自动化查谁没交作业
- Linux下如何创建和取消软连接
- 2、MySQL数据库-表的修改
- 计算机创建管理员用户名和密码,如何给电脑设置管理员登录密码?
热门文章
- 记录Linux下的钓鱼提权思路
- 《C++游戏编程入门(第4版)》——1.12 习题
- OWA登录页面显示为英文而不是中文
- C++实现int与string之间的相互转换
- Linux下截取指定时间段日志并输出到指定文件
- form表单的action提交写到js中来,同时onclick事件也写在js中来。其action也可以通过ajax来提交的。...
- Android Broadcast Receiver
- html input不可编辑
- T-SQL WITH 分号问题
- JavaIO操作(1)字节流和字符流-1