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 {@Overridepublic void look() {System.out.println("BookDaoImpl运行成功······");}
}// Service接口
public interface BookService {void look();
}// Service实现类
public class BookServiceImpl implements BookService {// 依赖的BookDaoprivate BookDao bookDao;// 依赖注入public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}@Overridepublic 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 BeanBookService bookService = (BookService) context.getBean("bookService");// 调用方法bookService.look();}
}
三、总结
--通过这个简单的示例,您可以了解控制反转(IoC)和依赖注入(DI)的基本原理及其在 Spring 框架中的应用。这样不仅减少了代码的耦合性,还提高了系统的可测试性和可维护性,是现代开发中非常重要的设计思想。
--当然实际案例中,大家可以使用自动注入的注解,如@Autowired @Resource这两个注入的方式进行注入,而不是自己去手写。