[Spring笔记02]-Spring IOC01

1. Spring IOC

1.1.Spring IOC的基本概念

概念列表:

  • 控制反转(Inversion of Control, IOC)
  • 依赖注入(DI)
  • Spring IOC容器
  • Bean

  • 控制反转(Inversion of Control, IOC):是Spring框架的核心,用来消减计算机程序的耦合问题。

    简单的说,就是将对象的创建权交给Spring IOC容器来管理。

  • Spring的依赖注入(DI):是IOC的另外一种说法。

    从Spring容器角度来看, Spring容器负责将被依赖对象赋值给调用者的成员变量,相当于为调用者注入它所依赖的实例, 这就是依赖注入。

  • Spring IOC容器:实现控制反转的就是Spring IOC容器。

  • Bean:在Spring中,构成应用程序主干,并由Spring IOC容器管理的对象称为bean。Bean及其之间的依赖 关系反映在容器使用的配置元数据中。

    下面给出一个简单的反应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
            http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="myDao" class="com.tao.MyDao">
            <!-- collaborators and configuration for this bean go here -->
        </bean>
    
        <bean id="myService" class="com.tao.MyService">
            <!-- 给构造方法传递引用类型的参数myDao(从这里可以看出,myService依赖myDao)-->
        	<constructor-arg index="0" ref="myDao"/>
        </bean>
    
        <!-- more bean definitions go here -->
    
    </beans>
    

1.2. Spring IOC容器

上面说过,实现控制反转的是Spring IOC容器。这里会介绍Spring IOC容器以及几个和IOC容器相关的接口和类,如BeanFactory接口、ApplicationContext接口和ClassPathXmlApplicationContext类等。


Spring IOC容器:是控制反转的实现。负责实例化、配置和组装bean。容器通过读取配置文件来获取有关要实例化、配置和组装bean对象的信息。(Bean的配置可以是XML配置文件也可以是注解)。


对于Spring IOC容器, Spring提供两个主要接口:BeanFactory(org.springframework.beans.factory.BeanFactory)ApplicationContext(org.springframework.context.ApplicationContext)


BeanFactory提供了完整的Ioc服务支持。这个接口实际开发并不多见。我们主要使用他的子接口ApplicationContextApplicationContext代表Spring IOC容器,负责配置、组装和实例化Bean。容器通过读取相应的配置元数据(常见的配置形式有xml文件、注解等)来获取和实例化、配置和组装Bean对象的有关信息。


Spring工作方式如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nmmRj7ah-1598532301591)(file:///I:/resources/spring-framework-5.0.2.RELEASE/docs/spring-framework-reference/images/container-magic.png)]

Spring IOC容器就通过应用程序类与配置文件中的配置元数据来创建和管理Bean对象。

1.2.1.配置元数据

在讲实例化IOC容器前我们先简单的介绍一下配置Spring。

问:配置元素的作用是什么?

答:我们可以通过配置元数据告诉Spring容器如何实例化,配置和组装应用程序中的对象。

Spring的配置方式有很多, 其中常见的XML文件的形式和注解的形式。


XML配置方式是由一个根元素<beans>以及多个子元素<bean>组成。其中<bean>标签就是配置Bean对象的。

以下示例显示了基于XML的配置元数据的基本结构:

<?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
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <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>

id属性是bean的唯一表示。class`属性定义Bean的类型,并使用完全限定的类名。

1.2.2. 实例化IOC容器

Spring提供了几个IOC容器接口的实现类如ClassPathXmlApplicationContext、FileSystemAppplicationContext类。

  1. 通过ClassPathXmlApplicationContext实例化IOC容器

    ClassPathXmlApplicationContext将从类路径目录(src目录)中寻找XML配置文件。

    public static void main(String[] args){
        //①加载配置文件,初始化Spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //②通过容器获取Bean的实例
        MyDao myDao = (MyDao)context.getBean("myDao");
        MyService myService = (MyService)context.getBean("myService");
    }
    
  2. 通过FileSystemXmlApplicationContext实例化IOC容器

    FileSystemXmlApplicationContext将从指定文件的绝对路径中寻找XML配置文件。

    public static void main(String[] args){
        //①加载配置文件,初始化Spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext("D:/applicationContext.xml");
        //②通过容器获取Bean的实例
        MyDao myDao = (MyDao)context.getBean("myDao");
        MyService myService = (MyService)context.getBean("myService");
    }
    

    注:

    采用绝对路径的加载方式将导致程序的灵活性变差,一般不推荐使用。因此Java应用程序通常采用ClassPathXmlApplicationContext类来实例化IOC容器。而在Web应用中,IOC容器的实例化工作将交给Web服务器完成

  3. 通过Web服务器实例化IOC容器

    在Web服务器中,实例化IOC容器时,一般使用基于org.springframework.web.context.ContextLoaderListener的实现方式(需要jar包:spring-web-5.0.2RELEASE.jar),在web.xml中的代码如下:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <!-- 指定以ContextLoaderListener 方式启动Spring容器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值