文档章节

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
2018/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

没有更多内容

加载失败,请刷新页面

加载更多

Java 判断实体类属性是否为空工具类

import org.apache.commons.lang.StringUtils;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * 判断对象是否为空 * @param obj * @return */pub......

骑羊放狼灬
8分钟前
0
0
基于nginx搭建RTMP服务器

安装nginx 下载ngnix源码 git clone https://github.com/nginx/nginx.gitgit clone https://github.com/arut/nginx-rtmp-module.git 编译安装 ./configure --add-module=../nginx-rtmp-mod......

cloudjx
21分钟前
0
0
从 Spark 到 Kubernetes — MaxCompute 的云原生开源生态实践之路

2019年5月14日,喜提浙江省科学技术进步一等奖的 MaxCompute 是阿里巴巴自研的 EB 级大数据计算平台。该平台依托阿里云飞天基础架构,是阿里巴巴在10年前做飞天系统的三大件之分布式计算部分...

迷你芊宝宝
24分钟前
0
0
5个Vue.js项目的模板

开发人员查看使用SPA,Webpack,身份验证,GraphQL,文档和测试的Vue开发人员的资源。 你准备开始一个重要的Vue项目吗?为了确保从坚实的基础开始,您可以使用模板(也就是样板,骨架,起动器...

写字的男孩儿
24分钟前
0
0
epoll 的本质是什么?

从事服务端开发,少不了要接触网络编程。epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,nginx、Redis、Skynet 和大部分游戏服务器都使用到这一多路复用技术。 epoll 很重要,但是...

编辑部的故事
28分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部