【Spring】idea + maven 從零創建Spring IoC容器示例
- 1. 環境準備
- 2. 創建maven項目
- 3. 添加依賴
- 4. 創建Java類與接口
- 4.1 定義接口UserService
- 4.2 實現接口UserServiceImpl
- 5. 配置Spring IoC容器
- 6. 編寫主類調用IoC容器
- 擴展:使用注解方式實現IoC
- 1. 修改beans.xml
- 2.使用注解標記Bean
- 小結:
1. 環境準備
idea編輯器
jdk1.8+
maven
2. 創建maven項目
① 打開IDEA → New Project → Maven → Next
② 填寫項目信息:
Groupld:vip.buddha
ArtifactId: spring-ioc-demo
Version: 1.0.0
③ 點擊Finish,項目結構如下:
spring-ioc-demo
├── src
│ ├── main
│ │ ├── java
│ │ └── resources
│ └── test
│ └── java
└── pom.xml
3. 添加依賴
<dependencies><!-- Spring 基礎依賴 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.39</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.39</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.39</version></dependency><!-- Spring IoC 核心依賴 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.39</version> <!-- 與 Spring 版本一致 --></dependency>
</dependencies>
手動添加完畢依賴,點擊idea右側maven面板的刷新按鈕,下載依賴
4. 創建Java類與接口
4.1 定義接口UserService
package vip.buddha.service;public interface UserService {String getUserName();
}
4.2 實現接口UserServiceImpl
package vip.buddha.service;public class UserServiceImpl implements UserService{@Overridepublic String getUserName() {return "buddha";}
}
5. 配置Spring IoC容器
在src/main/resources下創建beans.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定義bean --><bean id="userService" class="vip.buddha.service.UserServiceImpl"/>
</beans>
6. 編寫主類調用IoC容器
package vip.buddha;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import vip.buddha.service.UserService;public class Main {public static void main(String[] args) {// 1、加載Spring配置文件ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");// 2、從容器中獲取beanUserService userService = context.getBean("userService", UserService.class);// 3、調用方法String userName = userService.getUserName();System.out.println(userName);}
}
編寫完畢項目結構如下圖:
spring-ioc-demo
├── src
│ ├── main
│ │ ├── java
│ │ │ ├── vip.buddha
│ │ │ │ ├── service
│ │ │ │ │ ├── UserService.java
│ │ │ │ │ ├── UserServiceImpl.java
│ │ │ │ ├── Main.java
│ │ └── resources
│ │ │ ├── beans.xml
│ └── test
│ └── java
└── pom.xml
擴展:使用注解方式實現IoC
1. 修改beans.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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 開啟組件掃描 --><context:component-scan base-package="vip.buddha"/>
</beans>
2.使用注解標記Bean
package vip.buddha.service;import org.springframework.stereotype.Component;@Component("userService") // 等價于 <bean id="userService" .../>
public class UserServiceImpl implements UserService{@Overridepublic String getUserName() {return "buddha";}
}
小結:
IoC核心思想:對象的創建和依賴管理由Spring容器負責,而非手動new