IOC系列:IOC简介


1. IOC概念

1.1 概念简述

  控制反转:指对一个对象的控制权的反转。开发者将对象的控制权交由Spring容器去管理。

1.2 示例详解

1.2.1 代码块示例

@Data
public class Book {
   private Integer id;
   private String name;
   private Double price;
}

public class User {
   private Integer id;
   private String name;
   private Integer age;

   public void doSth() {
       Book book = new Book();
       book.setId(3);
       book.setName("西游记");
       book.setPrice((double) 6);
   }
}

1.2.2 IOC示例详解

  Book 对象的控制权在 User 对象里边,这样的话Book 和 User 高度耦合。如果在其他对象中需要使用 Book 对象,得重新创建,即对象的创建、初始化、销毁等操作,统统都要开发者自己来完成。如果能够将这些操作交给容器来管理,开发者就可以极大的从对象的创建中解脱出来。使用 Spring 之后,我们可以将对象的创建、初始化、销毁等操作交给 Spring 容器来管理。即项目启动时,所有的 Bean 都将自己注册到 Spring 容器中去(如果有必要的话),然后如果其他 Bean 需要使用到这个 Bean ,则不需要自己去 new,而是直接去 Spring 容器去要。

2. IOC使用

以Xml文件注入Bean为例来做演示,使用AbstractXmlApplicationContext来获取Spring容器。

2.1 添加依赖

  先创建一个普通的 Maven 项目,然后引入 spring-context 依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <!-- 版本自行指定,或者跟随父工程-->
        <version>5.1.9.RELEASE</version>
    </dependency>
</dependencies>

2.2 向Spring容器中配置对象

  在resources目录下创建一个spring的配置文件:applicationContext.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">

    <!--class属性表示需要注册bean的全路径,
        id 则表示bean的唯一标记,
        也可以name属性作为bean的标记-->
    <bean class="com.learning.spring.ioc.Book" id="book"/>
</beans>

2.3 从Spring容器中获取对象

  在main方法中使用ClassPathXmlApplicationContext来加载配置文件,这时Spring容器会将配置文件中定义的Bean全部创建并管理。此后,我们只需要从Spring容器中获取该对象即可,无需开发者自行创建对象;从而完成了对象控制权的反转。

使用ClassPathXmlApplicationContext是去classpath下加载配置文件;
我们也可以使用 FileSystemXmlApplicationContext,它会从操作系统路径下去寻找配置文件。

public class Main {
    public static void main(String[] args) {
        // 加载Spring的配置文件:Spring容器会自动加载配置文件中定义的Bean
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 从Spring容器中获取对象
        Book book = (Book) ctx.getBean("book");
        // 输出Spring容器中管理的对象
        System.out.println(book);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值