IoC + DI 入门案例

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这两个注入的方式进行注入,而不是自己去手写。