博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二、IOC容器基本原理
阅读量:5129 次
发布时间:2019-06-13

本文共 3236 字,大约阅读时间需要 10 分钟。

IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需在代码中new相关的对象,应用程序由IOC容器进行组装。

spring IOC管理的对象,我们称为bean。bean就是spring容器初始化,装配,及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别。那IOC如何实例化bean、管理bean之间的依赖关系?这些就需要配置元数据。

写个hello world(我用的是maven)

pxm.xml

org.springframework
spring-context
4.3.4.RELEASE
junit
junit
4.11
test
jdom
jdom
1.1

helloInter.java

public interface helloInter {           public void sayHello();  }

helloImpl.java

public class helloImpl implements helloInter{    public void sayHello() {        // TODO Auto-generated method stub        System.out.println("Hello World!!!");    }}

hello.xml

helloTest.java

import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class helloTest {           @Test           public void testHelloWorld() {                   //1、读取配置文件实例化一个IoC容器                   ApplicationContext context = new ClassPathXmlApplicationContext("hello.xml");                   //2、从容器中获取Bean,注意此处完全“面向接口编程,而不是面向实现”                   helloInter helloApi = context.getBean("hello", helloInter.class);                    //3、执行业务逻辑                    helloApi.sayHello();             }  }

运行,可以看出输出一个hello World。

在spring IOC容器的代表就是org.springframework.beans包中的BeanFactory接口,BeanFactory接口提供了IOC容器最基本功能,而org.springframework.context包下的ApplicationContext接口扩展了BeanFactory,还提供了与Spring AOP集成,国际化处理,事件传播及提供不同层次的context实现。简单说,BeanFactory提供了IOC容器最基本功能,而ApplicationContext则增加了更多支持企业级功能支持。ApplicationContext完全继承BeanFactory,因而BeanFactory所具有的语义也适用于ApplicationContext。

容器实现一览:

XmlBeanFactory:BeanFactory实现,提供基本的IoC容器功能,可以从classpath或文件系统等获取资源;

(1) File file = new File("fileSystemConfig.xml");
Resource resource = new FileSystemResource(file);
BeanFactory beanFactory = new XmlBeanFactory(resource);
(2)
Resource resource = new ClassPathResource("classpath.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);

ClassPathXmlApplicationContext:ApplicationContext实现,从classpath获取配置文件;

BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath.xml");

FileSystemXmlApplicationContext:ApplicationContext实现,从文件系统获取配置文件。

BeanFactory beanFactory = new FileSystemXmlApplicationContext("fileSystemConfig.xml");

 

ApplicationContext接口获取Bean方法简介:

• Object getBean(String name) 根据名称返回一个Bean,客户端需要自己进行类型转换;
• T getBean(String name, Class<T> requiredType) 根据名称和指定的类型返回一个Bean,客户端无需自己进行类型转换,如果类型转换失败,容器抛出异常;

• T getBean(Class<T> requiredType) 根据指定的类型返回一个Bean,客户端无需自己进行类型转换,如果没有或有

多于一个Bean存在容器将抛出异常;
• Map<String, T> getBeansOfType(Class<T> type) 根据指定的类型返回一个键值为名字和值为Bean对象的 Map,
如果没有Bean对象存在则返回空的Map。

 

让我们来看下IoC容器到底是如何工作。在此我们以xml配置方式来分析一下:

一、准备配置文件:就像前边Hello World配置文件一样,在配置文件中声明Bean定义也就是为Bean配置元数据。

二、由IoC容器进行解析元数据: IoC容器的Bean Reader读取并解析配置文件,根据定义生成BeanDefinition配置元数据对象,IoC容器根据BeanDefinition进行实例化、配置及组装Bean。

三、实例化IoC容器:由客户端实例化容器,获取需要的Bean。

 

转自:

转载于:https://www.cnblogs.com/gudulijia/p/6402661.html

你可能感兴趣的文章
Day 24 20190208 老男孩python学习第24天 内容整理
查看>>
php ascii hex编码
查看>>
Hadoop.2.x_网站PV示例
查看>>
EXTJS如何使用(转载)
查看>>
枚举 - 1.熄灯问题
查看>>
007grafana监控时间戳转换
查看>>
【2003-4】【分数计算】
查看>>
【2011-5】【最大乘积】
查看>>
一般计算 【2007】三3 C++版
查看>>
git使用总结
查看>>
2016-12-26 spoj STARSBC 欧拉函数水 spoj KAOS 字典树
查看>>
GoLang安装
查看>>
Spring 4 官方文档学习(十一)Web MVC 框架之HTTP caching support
查看>>
蓝桥杯历届试题 错误票据
查看>>
Objective-C 继承与多态
查看>>
图像预处理第6步:分割,并在分割出来的字符外面画框以标识
查看>>
NTP时间服务
查看>>
2016.04.11,英语,《Vocabulary Builder》Unit 12
查看>>
Web项目去掉Js文件红叉
查看>>
Linux 学习路径图
查看>>