【Java.Spring.Core】【IoC】IoC容器 - Container

IoC也称为依赖注入。

org.springframework.beans和org.springframework.context包是Spring IoC容器的基础。BeanFactory接口提供了可以管理任何类型对象的配置机制。AplicationContext是BeanFactory接口的子接口,它增加了AOP特征,message resource handling, event publication,以及特定应用层的context上下文如web应用中的WebApplicationContext。

简而言之,BeanFactory提供了基本的功能,而ApplicationContext则增加了更多的企业应用的功能。

在Spring中,有Spring IoC容器管理的对象称为Beans

容器

接口org.springframework.context.ApplicationContext表示Spring IoC容器,负责实例化,配置,装配前面提到的beans。

容器通过读取配置文件/元数据(metadata)来获取用来实例化对象的规范。配置元数据(metadata)可能是XML文件,Java注解(annotations),甚至是Java Code。


Spring本身提供了一些ApplicationContext接口的实现类;例如在一个stand-alone应用中,通常会创建一个ClassPathXmlApplicationContext或者FileSystemXmlApplicationContext对象。XML是常用的配置元数据形式。

在大部分应用中,通常不需要显式地去实例化一个Spring IoC 容器。例如,在web应用中,可以通过在web.xml通过少量的配置来完成context的创建。


【Java.Spring.Core】【IoC】IoC容器 - Container_第1张图片

配置元数据(Configuration metadata)

配置元数据用来通知Spring 容器何如去实例化,配置,装配对象。

XML文件是最常见的配置元数据形式


Spring配置元数据中通常包含多个bean的定义。在XML形式的配置元数据中,beans被配置在元素中,这些XML元素都位于上层XML元素节点中。

这些定义的bean通常为服务层(service layer)对象,如DAOs;表示层对象,如Structs Action实例;基础层对象,如Hibernate SessionFactor, JMS Queue等。通常不在容器中定义具体的业务对象


XML格式的配置元数据示例如下:




    
        
    

    
        
    

    


id属性用来表示这个bean;class属性为bean类型的完整类型名称。


bean定义可以位于多个XML文件中,使用元素来加载其他的配置文件,例如:


    
    
    

    
    


这些包含的文件的路径为相对于当前配置文件的相对路径;即services.xml与当前文件位于同一个目录,而messageSource.xml和themeSource.xml文件位于子目录resources中(路径前面的 / 将被忽略)。同时import进来的XML文件同样需要包含上层的元素,并且遵循同样的配置文件Schema。


实例化容器

实例化容器只需要向ApplicationContext的构造函数中传入配置元数据的资源路径,例如:

ApplicationContext context =
    new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});

使用容器

ApplicationContext接口是一个对象厂,负责维护管理benas及其依赖。

使用方法 T getBean(String name, Class requiredType)可以用来获取实例化的benas。

例如:

// create and configure beans
ApplicationContext context =
    new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});

// retrieve configured instance
PetStoreService service = context.getBean("petStore", PetStoreService.class);

// use configured instance
List userList = service.getUsernameList();

当然,也可以不直接调用getBean()方法,具体的注入方法参见后面。









你可能感兴趣的:(【Java.Spring.Core】【IoC】IoC容器 - Container)