【Spring框架全系列】IOC DI案例,setter方法和构造方法注入(详解) + 思维导图

一.概念

最核心的一个特性:IoC:控制反转、DI:依赖注入。IoC和DI你可以理解为是同一个功能的两种表述方式。

控制反转:之前由开发人员,应用程序负责去创建对象;但是现在交由Spring的IoC容器负责去创建实例对象,这个过程,有一个反转,称之为控制反转。之前在项目一中,我们使用Service实现类,我们都是自己去创建该实例对象,但是借助于SpringIoC容器之后,我们将对象的创建交给Spring容器去做,你需要做的事情就是从Spring容器中获取该实例对象即可。
依赖注入:比如说UserServiceImpl对象中,持有一个应用userDao,如果我们将userServiceImpl和userDao实现类全部都放入到Spring容器中之后,Spring会负责将userDao实例对象注入到userServiceImpl对象中。当我们从容器中取出userServiceImpl实例时,它已经和userDao产生了关联。

在这里插入图片描述
三层架构中的组件全部都会交给Spring容器去管理维护,我们需要做的事情其实无外乎就三件事:

1.需要告诉Spring容器,需要将哪些对象的创建工厂交给Spring容器去执行

2.需要告诉Spring容器,帮助我们维护对象和对象之间的依赖关系

3.在需要使用到某个对象时,我们利用它提供的方法从容器中获取对应的实例对象即可


实操

Maven父子工程

首先创建一个父工程,父工程主要的作用是引入依赖,那么接下来所有的子工程可以通过继承的方式获取该依赖,这样便无需反复地去导入依赖。创建出来的父工程只需要一个pom.xml文件即可,其他的目录可以把它删除。
在这里插入图片描述


二. IOC和DI入门案例【重点】

resources目录下新建一个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">

    <!--我的诉求是希望Spring容器可以帮助我们创建userServiceImpl对象和userDaoImpl对象-->
    <bean id="userService" class="com.code.service.UserServiceImpl"/>

    <bean id="userDao" class="com.code.dao.UserDaoImpl"/>

    <bean id="userDao2" class="com.code.dao.UserDaoImpl"/>

</beans>

1 IOC入门案例【重点】

问题导入

<bean>标签中id属性和class属性的作用是什么?

1.1 门案例思路分析
  1. 管理什么?(Service与Dao)
  2. 如何将被管理的对象告知IOC容器?(配置文件)
  3. 被管理的对象交给IOC容器,如何获取到IoC容器?(接口)
  4. IOC容器得到后,如何从容器中获取bean?(接口方法)
  5. 使用Spring导入哪些坐标?(pom.xml)
1.2 实现步骤

【第一步】导入Spring坐标
【第二步】定义Spring管理的类(接口)
【第三步】创建Spring配置文件,配置对应类作为Spring管理的bean对象
【第四步】初始化IOC容器(Spring核心容器/Spring容器),通过容器获取bean对象

1.3 实现代码
【第一步】导入Spring坐标

<dependencies>
    <!--导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.10.RELEASE</version>
    </dependency>
</dependencies>

【第二步】定义Spring管理的类(接口)

  • BookDao接口和BookDaoImpl实现类
public interface BookDao {
   
   
    public void save();
}

public class BookDaoImpl implements BookDao {
   
   
    public void save() {
   
   
        System.out.println("book dao save ...");
    }
}

【第三步】创建Spring配置文件,配置对应类作为Spring管理的bean对象*

  • 定义applicationContext.xml配置文件并配置BookServiceImpl
<?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标签:表示配置bean
    	id属性:表示给bean起名字
    	class属性:表示给bean定义类型
	-->
    <bean id="bookService" class="com.code.service.impl.BookServiceImpl"></bean>

</beans>

注意事项:bean定义时id属性在同一个上下文中(IOC容器中)不能重复

【第四步】初始化IOC容器(Spring核心容器/Spring容器),通过容器获取Bean对象

public class App {
   
   
    public static void main(String[] args) {
   
   
        //1.创建IoC容器对象,加载spring核心配置文件
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //2 从IOC容器中获取Bean对象(BookService对象)
        BookService bookService= (BookService)ctx.getBean("bookService");
        //3 调用Bean对象(BookService对象)的方法
        bookService.save();
    }
}

1.4 运行结果
在这里插入图片描述

2.1 DI入门案例思路分析
  1. 基于IOC管理bean
  2. Service中使用new形式创建的Dao对象是否保留?(否)
  3. Service中需要的Dao对象如何进入到Service中?(提供方法)
  4. Service与Dao间的关系如何描述?(配置)
2.2 实现步骤
【第一步】删除使用new的形式创建对象的代码
【第二步】提供依赖对象对应的setter方法
【第三步】配置service与dao之间的关系
2.3 实现代码

环境代码:

BookService接口和BookServiceImpl实现类:

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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值