Spring 如何初始化一个容器

Spring 如何初始化一个容器

什么是Spring 的 IOC 容器呢 ?  可以说  BeanFactory 就是 我们看到的Spring IoC容器.

如何初始化 SPRING 的 IOC 容器 ?

一共三种方法 :

1 :
Resource resource  =   new  FileSystemResource( " beans.xml " );
BeanFactory factory 
=   new  XmlBeanFactory(resource);


2:

ClassPathResource resource  =   new  ClassPathResource( " beans.xml " );
BeanFactory factory 
=   new  XmlBeanFactory(resource);

 
3:

ApplicationContext context  =   new  ClassPathXmlApplicationContext new  String[]  {"applicationContext.xml""applicationContext-part2.xml"} );
BeanFactory factory 
=  (BeanFactory) context;


详细展开 :

一 :org.springframework.core.io包中主要是各样的Resource类

Spring 如何初始化一个容器_第1张图片

补充UML 知识 :

1:类名是斜体的表示是抽象类,正体的表示普通类

2 :
Spring 如何初始化一个容器_第2张图片
3 :

    Spring 如何初始化一个容器_第3张图片

温昱说图

org.springframework.core.io包中主要是各样的Resource类,Spring的 Resource 接口是为了提供更强的访问底层资源能力的抽象。相当巧妙的地方在于,为何AbstractResource的子类有的override了getFile()而有的没有?这是因为在AbstractResource的getFile()方法设计为抛出异常,如果子类没有重写此方法,说明子类不支持通过绝对路径查找资源的方式,而override的子类则提供自己的实现。这里通过类的层次设计,充分利用继承带来的优点,避免了大量的条件语句。


二 :关于 org.springframework.beans.factory 包 和 org.springframework.context 包:

1 :BeanFactory 是个接口,LifecycleBean 是个类它负责管理bean的生命周期,它实现了4个接口,并且有一个 BeanFactory  类型的变量 owningFactory

Spring 如何初始化一个容器_第4张图片

补充一下 上文 的 XmlBeanFactory 不是

org.springframework.beans.factory

包下面的 而是

org.springframework.beans.factory.xml

下面的

2 。 ApplicationContext 也是个接口,它继承的 ListableBeanFactory  接口 又 继承 BeanFactory 接口

public   interface  ApplicationContext  extends  ListableBeanFactory, HierarchicalBeanFactory,  MessageSource, ApplicationEventPublisher, ResourcePatternResolver  {
}

public   interface  ListableBeanFactory  extends  BeanFactory  {
}

        Spring的bean包支持通过编码方式管理和操作bean的基本功能,ApplicationContext则以Framework的方式提供BeanFactory的所有功能。使用
ApplicationContext,你可以让系统加载你的bean,例如:

在Servlet容器初始化ContextLoaderServlet时,通过ContextLoader类加载Spring Framework),而不是使用编码方式来加载。

       ApplicationContext接口是context包的基础,位于org.springframework.context包里,提供了BeanFactory的所有功能。除此之外, ApplicationContext为了支持Framework的工作方式,提供了以下的功能:

       l.MessageSource,提供了语言信息的国际化支持
      
2 .提供资源(如URL和文件系统)的访问支持
      
3 .为实现了ApplicationListener接口的bean提供了事件传播支持
      
4 .为不同的应用环境提供不同的context,例如支持web应用的XmlWebApplicationContext类


你可能感兴趣的:(Spring 如何初始化一个容器)