IoC + DI 入门案例
一、简介
1. IoC(控制反转)
--解释:
控制反转是一种设计原则,它将对象的创建和管理交给框架或容器,而不是由对象自己负责。这种方式使系统的结构更加灵活,有助于实现解耦合和提高可测试性。
2. DI(依赖注入)
--解释:
依赖注入是一种实现控制反转的方法,通过将依赖关系作为外部参数传递给需要它的对象,而不是在对象内部创建它们。这样有助于降低对象之间的耦合度。
二、流程
1. 创建 Maven 项目
首先,您需要创建一个基于 Maven 的 Java 项目,通常可以使用 IDE(如 IntelliJ IDEA 或 Eclipse)创建。
2. 创建包结构
按照逻辑功能划分包,推荐如下的包结构:
com
└── bdqn
├── dao
│ └── BookDao.java
│ └── BookDaoImpl.java
└── service
└── BookService.java
└── BookServiceImpl.java
3. 导入 Spring 依赖
在 pom.xml
文件中添加以下依赖项,以便能够使用 Spring 的功能:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
4. 创建 DAO 和 Service 接口及实现类
以下是 BookDao
和 BookService
的接口及其实现类的代码示例:
// DAO接口
public interface BookDao {
void look();
}
// DAO实现类
public class BookDaoImpl implements BookDao {
@Override
public void look() {
System.out.println("BookDaoImpl运行成功······");
}
}
// Service接口
public interface BookService {
void look();
}
// Service实现类
public class BookServiceImpl implements BookService {
// 依赖的BookDao
private BookDao bookDao;
// 依赖注入
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
@Override
public void look() {
System.out.println("BookServiceImpl运行成功······");
bookDao.look();
}
}
5. 创建 Bean 配置文件
创建一个 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">
<!-- 配置BookDao Bean -->
<bean id="bookDao" class="com.bdqn.dao.BookDaoImpl"/>
<!-- 配置BookService Bean -->
<bean id="bookService" class="com.bdqn.service.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
6. 编写测试类
创建一个名为 Test
的测试类,验证 IoC 和 DI 的实现:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
// 加载Spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取BookService Bean
BookService bookService = (BookService) context.getBean("bookService");
// 调用方法
bookService.look();
}
}
三、总结
--通过这个简单的示例,您可以了解控制反转(IoC)和依赖注入(DI)的基本原理及其在 Spring 框架中的应用。这样不仅减少了代码的耦合性,还提高了系统的可测试性和可维护性,是现代开发中非常重要的设计思想。
--当然实际案例中,大家可以使用自动注入的注解,如@Autowired @Resource这两个注入的方式进行注入,而不是自己去手写。