文档章节

springIOC概念快速入门

1#~~
 1#~~
发布于 2016/11/17 18:36
字数 915
阅读 24
收藏 0

我的学习方式是,学习一个东西,得有一个整体的框架,不然,我会受不了总是模仿着demo程序而不知道这个黑箱子里头到底是什么鬼的状态,这样简直让人抓狂。如果,你也像我这样,建议多看一些博客,有个总体的概览。这篇文章,讲解我在初学spring时,哪些令我抓狂的概念。

  1. 依赖
  2. 工厂与容器

这就是这里要围绕讲解的两个内容。

                                                                                                                

为什么要理解依赖。刚接触spring,我们最开始接触的术语,应该是 “控制反转ioc(inversion of control”);

具体怎么理解控制反转,我觉得即使解释也很难理解。有些书里也说了,某某人提出了一个更容易理解的概念。ioc=ID(injection dependency )依赖注入。意思是说,一个类中,依赖于其他类的“关系”,采用注入的形式,而不是采用 在“”类中自己编码实现“”的形式 来完成依赖关系。

依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注入到组件之中 。 

依赖:依赖是一种 域对象 间的关系。与之相似的概念有 “关联”,"聚合”等。深入学习,可以去看 《UML统一建模语言指南》。这里举一些例子来讲解。

//这里不是依赖
public class Cat{
	Foot foot;
	Head head;
	Body body;	//组合
}
public class ClassOne{
	List<Student> studentList;	//聚合
	String className;
}
public class Order{
	String orderId;
	Product product;
	Int num;
	Customer customer; //关联
}

好吧,这几个跟依赖没有关系。

public class StudentService{
	StudentDao dao = new StudentDaoImpl();
	public Student getStudentById(int id){
		dao.getStudentById(id);				//依赖
	}
}

这是依赖的一种,spring中的依赖不完全等同于UML中的依赖,它将泛化的关系也当做依赖关系。

主要想要表达的是:

  1. 依赖,是一种域对象之间的(引用)关系。
  2. 依赖,在没有ioc概念出现之前,是通过手动的在类中创建如上例中,dao的创建,且dao的实现必须是确定的。
  3. spring中,依赖通过“容器”来注入。(实际上其他很多ioc容器也都使用反射来实现依赖注入)

                                                                                                                                                

你可能听到这么一句话,spring就是一个大的工厂。那么,代码层面上,是怎么体现工厂的特性的呢。

首先来回顾下,我们以前用过的工厂。

session=SessionFactory.open();
someObj=(AType)applicationContext.getBean("beanName");
object=beanFactory.getBean(object.Class);

public  class MyFactory{
	public person createPerson(){
		person=new Person();
		returne person;
	}
}
persn=(new MyFactory()).createPerson();

无非就是一个工厂的类,加一个工厂方法(静态或非静态,有参数或无参,但一定都有返回值);

而常说的spring中的ioc容器,也就是一个工厂,一个容器。

说是工厂,所以接口必须定义成:

public interface BeanFactory{
	<T> getBean(args...)       //这就是我要的工厂方法
}

而说是容器,是因为一个工厂,必须有原料啊。但这个接口并没有装原料的地方啊。

而我们常用的类是ClassPathXMLAppliactionContext ,这个是这个工厂接口的某一级子类。

public class ClassPathXMLAppliactionContext{
	Map BeanMap;			//一些实体
	Map BeanDefination;		//实体的依赖关系的描述信息
	<T> getBean(args...)	//采用上述两种材料来组装出目标的 Bean;
}

然而,这个容器中,不仅包含了生产实体的原材料,还包含一些环境,所以名称中叫Context也是有环境的意义在里面的吧。

© 著作权归作者所有

共有 人打赏支持
上一篇: 菜鸟笔记01
下一篇: 菜鸟笔记01
1#~~
粉丝 0
博文 2
码字总数 1274
作品 0
深圳
私信 提问
SpringBoot 条件注解 @Conditional

SpringBoot 条件注解 @Conditional 转载:https://segmentfault.com/a/1190000011433487

UEUEO
11/26
0
0
Docker容器的快速入门

Docker容器的快速入门 Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 ...

zhaoliang1131
2017/01/19
0
0
从零到专业,程序员快速入门Python的3种方法!

Python作为一门网红编程语言,这一阵子也红的发紫。 有不少的程序员表示,对这门编程语言非常感兴趣。所谓人生苦短,人生苦短我用python。 从零到专业,程序员快速入门Python的3种方法! 不过...

W3Cschool
2017/12/19
0
0
我是如何学习git

一开始学习git的时候,网上的git教程很多,看得人眼花缭乱,不知道如何下手。现在对git已经很熟悉了,回过头来总结一下学习方法。 一般官方文档是最全面,但是不一定适合快速上手。我们可以学...

好好编程
2017/11/14
0
0
机器学习 人工智能 博文链接汇总

115 [入门问题] [TensorFlow] [深度学习] [好玩儿的算法应用实例] [聊天机器人] [神经网络] [机器学习] [机器学习算法应用实例] [自然语言处理] [数据科学] [Python] [Java] [机器学习--初...

aliceyangxi1987
2017/05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

http协议请求头的意义

GET /day31_Http_306/index.jsp HTTP/1.1: GET请求,请求服务器路径为/hello/index.jsp,协议为1.1 请求头 1.Host:localhost:请求的主机名为localhost2.User-Agent:Mozilla/5.0(Windows NT......

潇潇程序缘
40分钟前
6
0
Netty 简单服务器 (三)

经过对Netty的基础认识,设计模型的初步了解,来写个测试,试试手感 上篇也说到官方推荐我们使用主从线程池模型,那就选择这个模型进行操作 需要操作的步骤: 需要构建两个主从线程组 写一个服务器...

_大侠__
51分钟前
8
0
day02:管道符、shell及环境变量

1、管道符:"|" 用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等) [root@localho...

芬野de博客
今天
16
0
Kubernetes系列——Kubernetes 组件、对象(二)

一、Kubernetes 组件 介绍了Kubernetes集群所需的各种二进制组件。 Master 组件 Master组件提供集群的管理控制中心。Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一...

吴伟祥
今天
17
0
Flink-数据流编程模型

1、抽象等级 Flink提供了不同级别的抽象来开发流/批处理应用程序。 1) 低层级的抽象 最低层次的抽象仅仅提供有状态流。它通过Process函数嵌入到DataStream API中。它允许用户自由地处理来自一...

liwei2000
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部