Spring 学习笔记(一)- IoC/DI
核心概念理解
-
IoC(控制反转):使用对象时,由主动new产生对象转换为由外部提供对象,即将对象创建控制权由程序转移到外部;
-
IoC容器:Spring技术提供了一个容器,用来充当IoC思想中的 “外部”;
-
Bean:IoC容器负责对象的创建,初始化等一系列工作,在IoC容器被创建或被管理的对象
-
DI(依赖注入):在容器中建立bean与bean之间的依赖关系的整个过程;
【小结】:引入IoC和DI的目的是充分解耦:其一,使用IoC容器管理bean(IoC);其二,在IoC容器内将所有依赖关系的bean进行关系绑定
IoC入门案例
IoC设计思路
- IoC负责管理类对象:通过配置文件告知IoC容器管理对象的规则
- 通过接口实现获取IoC容器,同时通过接口方法获取 bean
IoC入门案例实现
-
在开始案例之前要在 pom.xml 文件中导入spring配置文件的依赖坐标,否则无法创建spring的配置文件
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.10.RELEASE</version> </dependency>
-
定义Spring管理的类(接口)
public interface BookService { public void save(); }
public class BookServiceImpl implements BookService { private BookDao bookDao = new BookDaoImpl(); public void save(){ bookDao.save(); System.out.println("book service save..."); } } }
-
创建Spring配置文件 applicationContext.xml,配置对应类作为Spring管理的bean
<?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"> <!-- 1.导入Spring的坐标spring-context,对应版本是5.2.10.RELEASE --> <!-- 2.配置bean --> <!-- bean标签表示配置Bean id属性表示bean起的名字 class属性表示bean的定义类型 --> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"/> </beans>
-
初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bean
public class App2 { public static void main(String[] args) { //获取IoC容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //获取bean BookService bookService = (BookService) ctx.getBean("bookService"); bookService.save(); } }
DI入门案例
DI设计思路
- 通过IoC容器解决bean与bean之间的依赖关系;
DI入门案例实现
- 删除使用new形式创建对象的代码,并提供对应的set方法
public class BookServiceImpl implements BookService { private BookDao bookDao; public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } public void save() { System.out.println("book service save ..."); bookDao.save(); } }
- 配置service与dao之间的关系
<?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"> <!-- 1.导入Spring的坐标spring-context,对应版本是5.2.10.RELEASE --> <!-- 2.配置bean --> <!-- bean标签表示配置Bean id属性表示bean起的名字 class属性表示bean的定义类型 --> <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/> <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl"> <!-- 配置service与dao的关系 --> <!-- properties标签表示配置当前bean的属性 name属性表示配置哪一个具体的属性 ref属性表示参照哪一个bean --> <property name="bookDao" ref="bookDao"/> </bean> </beans>