欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 Spring官方文档阅读(一)之IoC容器

程序员文章站 2022-04-01 08:40:03
1.2.容器概述经常在学习spring时,听到ApplicationContext,那么到底什么是ApplicationContext1.BeanFatory的子接口2.这个接口代表Spring IoC容器,负责实例化,配置和组装Bean3.容器读取元数据,对象实例,配置文件,组装那些对象的指令(这些配置元数据可能是XML,java注释,java代码,它更好的表达了我们的应用程序中,各个对象的依赖性)new ClassPathXmlApplicationContext就是在使用IoC容器Spr...

1.2.容器概述

经常在学习spring时,听到ApplicationContext,那么到底什么是ApplicationContext
1.BeanFatory的子接口
2.这个接口代表Spring IoC容器,负责实例化,配置和组装Bean
3.容器读取元数据,对象实例,配置文件,组装那些对象的指令
(这些配置元数据可能是XML,java注释,java代码,它更好的表达了我们的应用程序中,各个对象的依赖性)

new ClassPathXmlApplicationContext就是在使用IoC容器
Spring IoC容器不需要用户自己编写
在一个程序中,我们可以创建一个公共的实例对象 ClassPathXmlApplicationContext或者FileSystemXmlApplicationContext,通过这些实例对象来获取到ApplicationContext这个容器来对bean等信息进行操作,这就是使用了IoC容器

Spring容器的构建
可以通过少量的XML配置来指示容器使用JAVA注解或JAVA代码作为元数据格式,以声明方式启用对这些附加元数据的格式的支持

下图是spring工作图,我们的应用对象和配置元数据结合,之后生产一个,可以让我们完全配置和可执行的系统或应用程序
荐
                                                        Spring官方文档阅读(一)之IoC容器

1.2.1.配置元数据

格式:

  1. 传统上元数据是以xml的格式提供
  2. Annotation-based configuration:spring 2.5后支持基于注解的方式配置元数据
  3. Java-based configuration:spring 3.0使用基于java配置的方式配置
    spring配置至少是一个bean定义组成的;如果是xml配置,那么bean的配置使用标签,嵌套在标签中;
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--
        id:这个bean的标识字符串
        class:bean所引用的全类名
    -->
    <bean id="..." class="...">
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <bean id="..." class="...">
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions go here -->

</beans>
定义外部bean

@Configuration,@Bean,@Import,和@DependsOn注释
如果是Java配置,在有@Configuration注解的类中,使用@Bean注解
这些bean的定义是组成应用的对象,不分为Controller,service等层,这种细粒度的区分,但是我们也可以使用AspectJ与Spring依赖注入域对象来控制创建IoC容器之外的对象

1.2.2.实例化容器

利用ApplicationContext的构造函数来读取外部的xml配置

ApplicationContext context =
         new ClassPathXmlApplicationContext("services.xml", "daos.xml");

荐
                                                        Spring官方文档阅读(一)之IoC容器
导入外部资源

<beans>
    <import resource="services.xml"/>
    <import resource="resources/messageSource.xml"/>
    <import resource="/resources/themeSource.xml"/>

    <bean id="bean1" class="..."/>
    <bean id="bean2" class="..."/>
</beans>

services.xml是在当前文件路径下
messageSource和themeSource都在resources下 / 会被忽略
不建议使用 / …/来表示
荐
                                                        Spring官方文档阅读(一)之IoC容器
引入外部XML配置,就可以使用被引入XML配置中的bean

1.2.3.使用容器

ApplicationContext是一个维护bean定义以及相互依赖的注册表的高级工厂的接口
通过T getBean(String name, Class requiredType)可以获取到bean实例

// create and configure beans
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

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

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

不建议使用getBean方法,这样可以做到不依赖Spring API

总结:

简单的理解容器就是由真实存在的class和配置元数据(xml,java配置,注解)封装成的一个或多个bean集合,经过Spring包装和管理

本文地址:https://blog.csdn.net/weixin_45220428/article/details/107326385