Spring 之IOC容器(初级)

原创 2016年06月01日 21:52:34

Spring IOC容器(初级)

一、概念

1.容器:通俗的讲就是用来装东西的盒子,如果将东西装进容器里将使得我们对容器总的个体具备一定程度的可操作性,举个例子将1000个玻璃球放在一个瓶子里,执行如下的一些操作:

a) 瓶子中只允许存在一个蓝颜色的玻璃球(单例)

b) 为瓶子中黄颜色的玻璃球贴一个标签(切面)

c) 如果存在红颜色的玻璃球则必须存在唯一的一个黑颜色的玻璃球(依赖)

d) 欢迎补充

2.控制反转(Inversion of Control==IOC)&&依赖注入dependency injection (DI):通俗的理解我们要买一个杯子,一般的我们会主动的去超市买一个拿回来用,IOC的思想可以这么理解,我需要一个杯子我只需要告诉超市给我一个杯子,超市或者其它一个组织(超市或者组织扮演了容器的角色,自然“我”也应该处于容器的环境中)负责将杯子给我使用。总结如下:

a) 两个术语描述了同一个意思

b) IOC,主动变被动,需要什么只需要告诉某个组织(容器)即可

c) DI,需要什么就给你什么,社会主义的终极目标

3.Spring IOC:你能否想象得到如果将一个项目中的所有的Java对象都装在一个容器中,而各种类型的Java对象之间维持了一定的引用关系是多么有意义的一件事情吗?这将意味着我在使用一个Java对象的时候再也不需要显示的去New它了,只需要从IOC容器中获取一个即可。总结如下:

a) 用来装载、管理Java对象实例的“虚拟”容器

b) 本身也是一个Java类(面向对象语言的特性)

4.Spring Beans:通俗点,Bean指受IOC容器管理的Java对象

a) 有属性、构造器等一系列的属性

 

二、实现

1.IOC原型:由于面向对象语言特性Java中的容器依然是一个Java对象,这个Java对象使用某种数据结构(Map<String, Object>)管理了若干Spring Bean对象,Spring IOC容器的顶级接口为BeanFactory,ApplicationContext接口拓展了BeanFactory接口提供了AOP的支持,通常情况下使用的都是ApplicationContext间接子类如WebApplicationContextClassPathXmlApplicationContext等。

2.实现,以ClassPathXmlApplicationContext的实例化为例

a) 在xml中定义Spring Beans

<bean id="hello" class="cn.com.zjf.model.Hello">

<!-- 配置Bean对象的属性 -->

<property name="message" value="Hello World!!"></property>

</bean>

b) 显示实例化IOC容器

ClassPathXmlApplicationContext context =

    new ClassPathXmlApplicationContext("ApplicationContext.xml");

c) 设置XML资源位置&&刷新IOC容器

setConfigLocations(configLocations);

if (refresh) {

refresh();

}

d) 初始化IOC容器

try {

// Allows post-processing of the bean factory in context subclasses.

postProcessBeanFactory(beanFactory);

 

// Invoke factory processors registered as beans in the context.

invokeBeanFactoryPostProcessors(beanFactory);

 

// Register bean processors that intercept bean creation.

registerBeanPostProcessors(beanFactory);

 

// Initialize message source for this context.

initMessageSource();

 

// Initialize event multicaster for this context.

initApplicationEventMulticaster();

 

// Initialize other special beans in specific context subclasses.

onRefresh();

 

// Check for listener beans and register them.

registerListeners();

 

// 实例化剩余的非懒加载的单例Bean finishBeanFactoryInitialization(beanFactory);

 

// Last step: publish corresponding event.

finishRefresh();

}

e) finishBeanFactoryInitialization(beanFactory);做了什么

i. 获取所有Bean名称

List<String> beanNames = new ArrayList<String>(this.beanDefinitionNames);

ii. 遍历获取实例化Bean对象

for (String beanName : beanNames) {

getBean(beanName);

iii. 实例化Bean对象

if (mbd.isSingleton()) {

sharedInstance = getSingleton(beanName, new ObjectFactory<Object>() {

@Override

iv. Bean对象存储至数据结构

protected void addSingleton(String beanName, Object singletonObject) {

synchronized (this.singletonObjects) {

this.singletonObjects.put(beanName, (singletonObject != null ? singletonObject : NULL_OBJECT));

this.singletonFactories.remove(beanName);

this.earlySingletonObjects.remove(beanName);

this.registeredSingletons.add(beanName);

}

}

3.IOC容器中获取Bean对象,以获取idhello的对象为例

a) 获取Bean对象

Hello hello=context.getBean("hello", Hello.class);

b) AbstractApplicationContextgetBean方法

public <T> T getBean(String name, Class<T> requiredType) throws BeansException

c) AbstractApplicationContextdoGetBean方法

protected <T> T doGetBean(

final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly)

d) 得到Bean对象(代码摘选)

Object singletonObject = this.singletonObjects.get(beanName);

 

Object sharedInstance = getSingleton(beanName);

 

版权声明:代码的魅力 举报

相关文章推荐

Spring 之IOC容器(初级)

Spring 之IOC容器(初级) 一、概念 1.容器:通俗的讲就是用来装东西的盒子,如果将东西装进容器里将使得我们对容器总的个体具备一定程度的可操作性,举个例子将1000个玻璃球放在一个瓶子里...

Spring之IOC容器

一,概述 1)SpringIOC容器是Spring的核心内容.作用:创建对象及处理对象的依赖关系. 2)IOC容器创建对象的方式: a)调用无参数构造器 b)带参数构造器 c)工厂创建对象:...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Spring之IoC容器

spring是一个极为庞大和丰富的框架,笔者在此并不想从零开始的去讲解她。关于spring的基础概念等希望读者自行百度。文中会涉及到很多spring的源代码,我并不想在此处大量copy出来,有兴趣的读...

Spring IoC容器初始化

Spring IoC容器初始化详解

Spring-IoC容器初始化

Spring Ioc容器IoC容器最主要是对Bean对象的创建和依赖管里注入,这里翻看了源码总结了一个IoC容器的初始化过程

Spring IOC 容器

序:一直苦于阅读spring源码的切入点,这篇博文正好作为阅读Spring IOC源码作为一个切入点。 切入点:1.一个大致的处理流程(类的关系图或者流程图等表示) 2.几个主要接口或者类的功能介绍...

Spring IOC容器

IOC(Inversion of Control),中文名为控制反转,就是由容器来控制业务对象之间的依赖关系,而非传统实现,由代码直接操控。这也就是所谓的“控制反转”的概念所在;控制权由应用代码中转到...

Spring IoC容器

IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,...

spring IOC容器

1为什么使用spring 我们知道任何一个应用都需要用到多个类(并不是所有的应用都像Hello the world ),既然有多个类,那么久涉及到了多个之间的协作,多个类之间如何协作呢,当然是靠通...

Spring IoC容器

1. 概述IoC也称为”依赖倒置原理”(Dependency Inversion Principle),早在2004年,Martin Fowler就提出了 “哪些方面的控制被反转了?”这个问题.他得出...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)