文档章节

springIOC概念快速入门

1#~~
 1#~~
发布于 2016/11/17 18:36
字数 915
阅读 23
收藏 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也是有环境的意义在里面的吧。

© 著作权归作者所有

共有 人打赏支持
1#~~
粉丝 0
博文 2
码字总数 1274
作品 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
《Linux云计算从入门到精通》系列实战笔记全放送

为了方便Linux云计算爱好者的学习查看,马哥Linx云计算团队特别整理了《Linux云计算从入门到精通》年度重磅大放送,囊括了整个学习过程的学习精华,内容全部由马哥Linux云计算学员撰写,欢迎...

898009427
2017/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash各类扩展详解

Bash各类扩展详解 Bash中主要包括大括号扩展、波浪号扩展、变量扩展、子命令扩展、文件名扩展和算数扩展。这些扩展组合在一起为Bash带来了极大的易用性。掌握这些扩展的用法和功能,能够为B...

小陶小陶
今天
1
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
5
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
3
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部