【Spring框架】Spring的IOC介绍

Spring的IOC介绍

Spring的IOC思想

Spring的核心思想之一:IOC(Inversion Of Control)控制反转。

控制反转(Inversion Of Control,即IOC):把对象的创建、初始化、销毁等工作交给框架,是框架的重要特征。并非面向对象编程的术语。控制反转包括依赖注入依赖查找

  • 控制反转表达的意思是什么?

    • 把对象的创建交给外部的容器完成,这个就是控制反转。
    • Spring使用控制反转来实现对象的使用(使该部分程序不用在程序中写死)。
  • 那么对象和对象之间的依赖关系Spring中的是如何处理的?

    • 依赖注入(Dependency injection)
    • Spring中使用依赖注入来实现对象之间的依赖关系。
    • 在创建对象之后,对象的关系处理就是依赖注入。

控制反转是通过外部容器完成的,而Spring中提供了一个容器,称该容器为:IOC容器。无论对象的创建,处理对象之间的依赖关系,对象创建的时间,对象创建的数量,都是在Spring索提供的IOC的容器上来配置对象的信息。

IOC的思想的核心在于:资源不在是使用资源方来管理,而是将资源交给第三方管理(IOC容器),这样来处理带来很多好处:

  • 资源的集中管理,实现资源的可配置和易管理。
  • 降低了使用资源双方的依赖程度,也就是耦合度问题。
Spring使用IOC容器管理对象

Spring的IOC容器如何管理对象的?下面来看看Spring的操作步骤。

1、导入依赖
<!--Spring核心依赖jar包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>4.1.7.RELEASE</version>
</dependency>
<!--log4j日志-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<!--注解相关jar包-->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
2、编写配置文件
  • Spring的配置文件(applicationContect.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-3.0.xsd">

</beans>
3、创建实体类
  • 创建资源(User.java)。
public class User {
    private String id;
    private String name;

    //getter和setter方法省略
}
4、IOC容器管理对象
  • 以前我们通过new User的方法创建对象。如:User user = new User();
  • 现在使用IOC的容器。可以让IOC容器帮创建对象,在applicationContext.xml文件中添加User的对应信息。
<?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-3.0.xsd">
    
    <!--使用bean节点来创建对象 id属性表示对象 class属性表示要交给容器管理的对象的全路径-->
    <bean id="user"  class="com.tulun.bean.User"/>
</beans>
5、通过容器来获取User对象
public class App {
    public static void main(String[] args) {
        //获取IOC的容器
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器来获取当前的对象
        User user = (User) applicationContext.getBean("user");
        System.out.println(user);
    }
}
  • 执行结果:

在这里插入图片描述

Spring的IOC容器介绍

Spring中的core模块:IOC容器,解决对象的创建和对象之间的依赖关系。

  • 那么如何得到IOC容器?

在这里插入图片描述

上图是Spring IOC容器中接口的继承关系,其中ApplicationContext是BeanFactory的子接口之一,换句话说,Beanfactory是IOC容器中最底层的接口,而ApplicationContext是其高级接口之一,在于对BeanFactory做了许多的功能上的扩展。在大部分的应用场景下,都是使用ApplicationConext作为Spring IOC的容器。

ApplicationContext的常见的实现类
ApplicationContext的常见的实现类说明
ClassPathXmlApplicationContext(常用)加载类路径下的配置文件,要求配置文件必须在类路径下
FileSystemXmlApplicationContext可以加载磁盘任意路径下的配置文件(必须要有访问权限)
XmlWebApplicationContext在Web环境下读取配置信息
AnnotationContigApplicationContext用于读取注解创建容器
  • 三种读取配置文件的程序代码写法:
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
FileSystemXmlApplicationContext xmlApplicationContext = new FileSystemXmlApplicationContext("c:/java/applicationContext.xml");
XmlWebApplicationContext wa = new XmlWebApplicationContext()//并没有初始化容器
wa.setServletContext(sevletcontext);//需要指定servletContext对象
wa.setConfigLocation("/applicationContext.xml");//指定配置文件的路径,开头是以web为根目录的路径
wa.refresh();//初始化容器
BeanFactory和ApplicationContext的区别
  • ApplicationContext在构建核心容器时,创建对象采取的是立即加载的方式。也就是说,只要一读取完配置文件马上就创建配置文件中配置的对象。
  • BeanFactory在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的创建对象。
Spring容器原理浅析
  • 1、利用dom4j技术,解析XML配置文件,获取里面所有的信息。
  • 2、根据class属性的值,利用反射创建对象。
  • 3、将利用反射创建出的对象放入到map中,key就是它所对应的id值。
Spring容器管理对象的过程

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值