IoC的原理

详解IoC容器

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

容器实现一览:

• XmlBeanFactoryBeanFactory实现,提供基本的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);

• ClassPathXmlApplicationContextApplicationContext实现,从classpath获取配置文件;

BeanFactory beanFactory = new ClassPathXmlApplicationContext(“classpath.xml”);

• FileSystemXmlApplicationContextApplicationContext实现,从文件系统获取配置文件。

BeanFactory beanFactory = new FileSystemXmlApplicationContext(“fileSystemConfig.xml”);

 

具体代码请参考cn.javass.spring.chapter2.InstantiatingContainerTest.java。

 

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。

 

posted @ 2017-07-06 15:32  williamcai  阅读(223)  评论(0)    收藏  举报