• Spring IOC、DI入门


    Spring核心概念主要包含IOC/DI、IOC容器和Bean

    1.几个重要的问题

    1. 什么是控制反转(IOC)?

      使用对象时,由自己亲手new对象到交给外部帮助我们提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。

    2. Spring和IOC之间的关系是什么?

      Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的"外部"

    3. IOC容器的作用以及内部存放的是什么?

      IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean

    4. 当IOC容器中创建好service和dao对象后,程序能正确执行吗?

    ​ 不行,因为service运行需要依赖dao对象,需要把dao对象交给service,也就是说要绑定service和dao对象之间的关系,在容器中建立对象与对象之间的绑定关系就要用到DI(依赖注入)。

    5.什么是依赖注入?

    在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

    2.IOC和DI入门案例

    Spring到底是如何来实现IOC和DI的?

    1. 用IOC容器管理项目中的所用到的类对象
    2. 通过配置文件告知IOC容器如何管理对象
    3. 通过接口拿到IOC中的对象(bean)
    4. 导入依赖才可以使用Spring框架

    **需求:**将BookServiceImpl和BookDaoImpl交给Spring管理,从容器中获得对应bean对象进行方法调用

    步骤:

    1.创建maven项目

    image-20221108205017534

    2.添加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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3.添加案例中需要的类

    image-20221108205144641

    BookDaoImpl、BookDao、BookServiceImpl、BookService

    package com.itheima.dao.impl;
    import com.itheima.dao.BookDao;
    public class BookDaoImpl implements BookDao {
        public void save() {
            System.out.println("book dao save ...");
        }
    }
    
    
    
    
    package com.itheima.dao;
    public interface BookDao {
        public void save();
    }
    
    
    
    
    package com.itheima.service.impl;
    import com.itheima.dao.BookDao;
    import com.itheima.service.BookService;
    
    public class BookServiceImpl implements BookService {
        //5.删除业务层中使用new的方式创建的dao对象,通过set方法获取
        private BookDao bookDao;
        public void save() {
            System.out.println("book service save ...");
            bookDao.save();
        }
        //6.提供对应的set方法
        public void setBookDao(BookDao bookDao) {
            this.bookDao = bookDao;
        }
    }
    
    
    
    package com.itheima.service;
    public interface BookService {
        public void save();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    4.添加Spring配置文件,在resourse目录下创建

    image-20221108205547045

    同时实现 DI依赖注入

    image-20221108210424203

    
    <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.itheima.dao.impl.BookDaoImpl"/>
    
        <bean id="bookService" name="bookEbi" class="com.itheima.service.impl.BookServiceImpl">
            
            
            <property name="bookDao" ref="bookDao"/>
        bean>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    6.获取IOC容器bean并实现方法调用

    package com.itheima;
    
    import com.itheima.dao.BookDao;
    import com.itheima.service.BookService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class App {
        public static void main(String[] args) {
            //3.获取IoC容器 要想拿bean先拿容器
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            //4.获取bean(根据bean配置id获取)这里需要强转为接口类型而不是对象类型,因为接口中存在方法
            BookDao bookDao = (BookDao) ctx.getBean("bookDao");
            bookDao.save();
    
            //将对象类型转换为接口
            BookService bookService = (BookService) ctx.getBean("bookEbi");
            bookService.save();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    image-20221108210008098

    关于bean的基础配置
    image-20221108210610568
    scope定义当前的bean是单例还是非单例,单例的话创建好一个对象可以实现复用,不用销毁,默认是单例。
    ps:参考哔哩哔哩黑马程序员spring网课教程~

  • 相关阅读:
    c 取字符串中的子串
    halcon知识:区域(Region)上的轮廓算子(2)
    day-53 代码随想录算法训练营(19)动态规划 part 14
    MockingBird,手把手教你克隆您的声音,AI代言人,惊艳你的耳朵!
    odoo15重建数据库(windows版本)
    1.安装 docker 容器并配置镜像加速器
    作为产品经理,你是如何分析和管理你的产品需求的?
    微信JSAPI支付对接
    竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统
    STM32中事件标志位与中断标志位
  • 原文地址:https://blog.csdn.net/weixin_51470901/article/details/127759000