Spring-入门案例
- 包括:
- IoC入门案例
- DI入门案例
一、IoC入门案例
1.1 分析
-
IoC容器管理什么?
- Service和Dao对象,即Bean;
-
如何将被管理的对象告知IoC容器?(哪些类的对象需要IoC容器管理)
- 通过配置文件实现(如xml);
-
如何获取IoC容器?
- 通过接口
-
得到IoC容器后,如何获取容器中的被管理对象(Bean)?
- 通过接口方法;
-
使用Spring导入哪些坐标?(即导入哪些外部依赖)
- 在pom.xml中给出
1.2 案例
-
根据上述分析,编写第一个Spring中运用IoC思想的案例:
-
工程目录结构:
-
**步骤1:**导入Spring坐标
-
在pom.xml中添加:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.21.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
-
-
**步骤2:**定义Spring管理的类(需要IoC容器管理的类和接口)
- BookDao接口
/** * @author: sea * @date: 2023/6/24 16:28 */ public interface BookDao { void save(); }
- BookDaoImpl类:
/** * @author: sea * @date: 2023/6/24 16:30 */ public class BookDaoImpl implements BookDao { @Override public void save() { System.out.println("BookDaoImpl____1"); } }
- BookService接口
/** * @author: sea * @date: 2023/6/24 16:29 */ public interface BookService { void save(); }
- BookServiceImpl类:
/** * @author: sea * @date: 2023/6/24 16:30 */ public class BookServiceImpl implements BookService { private BookDao bookDao = new BookDaoImpl(); public void save(){ bookDao.save(); } }
-
**步骤3:**创建Spring配置文件,配置对应的类作为Spring管理的bean
- 在
resource
目录下创建 Spring Config配置文件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"> <!-- 1.在pom.xml中导入spring和junit的坐标 --> <!-- 2.配置bean(id需唯一) --> <bean id="bookDao_" class="com.sea.dao.impl.BookDaoImpl"/> <bean id="bookService_" class="com.sea.service.impl.BookServiceImpl"/> </beans>
- 在
-
**步骤4:**初始化IoC容器,通过容器获取bean
- 在App_1.java中进行容器初始化并通过容器来获取bean
/** * @author: sea * @date: 2023/6/24 16:41 */ public class App_1 { public static void main(String[] args) { //获取IoC容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//通过接口的实现类获取IoC容器 //获取Bean BookDao bookDao = (BookDao)ctx.getBean("bookDao_");//通过接口的方法获取bean bookDao.save(); // BookService bookService = (BookService)ctx.getBean("bookService"); // bookService.save(); } }
-
**注意:**此时,BookServiceImpl仍然是通过
private BookDao bookDao = new BookDaoImpl();
来手动创建BookDao的,这个依赖关系目前在容器中还没有进行绑定。
二、DI入门案例
- 在上述案例的基础上:
- 不能再通过
new BookDaoImpl();
来获得BookDao
的对象,需要解耦;
- 不能再通过
2.1 分析
- Service中需要的Dao对象如何进入Service呢?
- 提供方法来实现
- 不同的Service与Dao之间的关系Spring容器如何知道?
- 配置文件
2.2 案例
-
在上述IoC案例的基础上:
-
**步骤1:**在Service中提供相应的方法获取Dao对象
- IoC容器会调用setBookDao()方法将需要的bean给Service;
/** * @author: sea * @date: 2023/6/24 16:30 */ public class BookServiceImpl implements BookService { private BookDao bookDao; public void save(){ bookDao.save(); } public void setBookDao(BookDao bookDao){ this.bookDao = bookDao; } }
-
**步骤2:**Spring配置文件中[
applicationContext.xml
]配置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.在pom.xml中导入spring和junit的坐标 --> <!-- 2.配置bean(id需唯一) --> <bean id="bookDao_" class="com.sea.dao.impl.BookDaoImpl"/> <bean id="bookService_" class="com.sea.service.impl.BookServiceImpl"> <!-- 3.配置service与dao之间的关系 --> <!-- name: 表示配置当前Service中哪一个具体的属性 --> <!-- ref: 表示参照哪一个bean --> <property name="bookDao" ref="bookDao_"/> </bean> </beans>