Spring 核心概念(IOC 与 DI)

总结自 黑马程序员 SSM框架,若涉嫌侵权,请联系本蒟蒻删除。

引入

Spring 出现之前的代码书写现状:耦合度偏高
解决方案:使用对象时,不要使用 new 主动创建对象,而转由外部提供对象。

  1. IoC (Inversion Of Control)控制反转
    对象的创建控制权由程序转移到外部。
    SpringIoC 思想进行了实现, 用 IOC 容器 充当外部。
    IOC 负责对象的创建和初始化,被创建或管理的对象在 IOC 容器中称为 Bean
  2. DI (Dependency Injection)依赖注入
    在容器中建立 bean 和 bean 的依赖关系
    DI 其实是 IOC 的一个步骤,就是对创建的对象的属性进行设置。
    (1) 使用构造方法进行注入;
    (2) 使用属性的 setter 方法进行注入;

目标:充分解耦
在 IOC 容器 中创建 bean 对象。(IoC)
在 bean 和 bean 之间 绑定依赖。(DI)
达到
不仅可以从 IOC 容器中获取 bean,而且获取的 bean 已经绑定了依赖关系。
的效果。

IoC 入门案例

分析

  1. 管理什么?(Service 和 Dao)
  2. 如何将被管理的对象告知 IoC 容器? (配置)
  3. 被管理的对象交给 IoC 容器,如何获取到 IoC 容器? (接口)
  4. IoC 容器得到后,如何从容器中获取 bean? (接口方法)
  5. 使用 Spring 需要导入哪些坐标? (pom.xml)

步骤

  1. 导入 Spring 坐标
<dependencies>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>5.2.10.RELEASEversion>
        dependency>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.12version>
            <scope>testscope>
        dependency>
    dependencies>
  1. 定义 Spring 管理的类( 接口 )
public interface BookService {
    public void save();
}

public class BookServiceImpl implements BookService {
    private BookDao bookDao = new BookDaoImpl();

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }

  1. 创建 Spring 配置文件,配置对应文件作为 Spring 管理的 bean

<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 = "bookDao" class="com.weixinyang.dao.impl.BookDaoImpl"> bean>
    <bean id = "bookService" class="com.weixinyang.service.impl.BookServiceImpl">bean>
beans>
  1. 初始化 IoC 容器 (Spring 容器,通过容器获取 Bean)
public class App2 {
    public static void main(String[] args) {
        // 3. 获取 IoC 容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 4. 获取 bean
//        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
//        bookDao.save();

        BookService bookService = (BookService) ctx.getBean("bookService");
        bookService.save();
    }
}

DI 入门案例

分析:

  1. 基于 IoC 管理 bean;
  2. 删除 Service 使用 new 形式创建的对象;
  3. Service 需要 的 Dao 对象如何进入到 Service? (提供注入方法)
  4. Service 和 Dao 之间的关系如何描述?(配置)

步骤:

  1. 删除使用 new 形式创建对象的代码
  2. 提供依赖对象对应的 setter 方法
public class BookServiceImpl implements BookService {
    // 5. 删除业务层中使用 new 方式创建的 dao 对象
    private BookDao bookDao;

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }

    // 6. 提供对应的 set 方法
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
}

3. 配置 service 和 dao 之间的关系


<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 = "bookDao" class="com.weixinyang.dao.impl.BookDaoImpl"> bean>
    <bean id = "bookService" class="com.weixinyang.service.impl.BookServiceImpl">
        



        <property name="bookDao" ref="bookDao"/>
    bean>


beans>

Spring 核心概念(IOC 与 DI)_第1张图片
注意两个 bookDao 代表不同意思,前面一个 bookDao 表示属性的名称,后面一个 bookDao 表示当前容器中对应的 bean 的 id

你可能感兴趣的:(#,Java,EE,spring,java)