認識IoC容器和Servlet容器
認識容器
1.IoC容器
IoC(Invension of Control) 容器,是面向對象編程中的一種設計原則,意思是控制反轉。它將程序中創建對象的控制權交給Spring框架來管理,以此來降低代碼之間的耦合度。
在傳統編程中,要實現一種功能一般需要幾個對象相互引用。在主對象中要保存其他類型對象的引用,以便在主對象中實例化對象,然後通過調用這些引用類的方法來完成任務。
而IoC容器的作用是什麼呢?要使用某個對象,只需要從IoC容器中獲取使用的對象,不需要關心對象的創建過程,也就是把創建對象的控制權反轉給了Spring框架。
用IoC管理Bean
實驗結果
運行testIoC方法,在控制檯會輸出如下結果
User(id=1, name=lishizheng)
項目目錄
0.添加依賴
該依賴用於測試,不添加註解@Test用不了
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
1.創建一個Bean
也就是創建名爲“User”的類
User.java
package com.example.demo.entity;
import lombok.Data;
import java.io.Serializable;
@Data
public class User implements Serializable {
private int id;
private String name;
}
2.編寫User的配置類
UserConfig.java,在這裏實例化一個對象
代碼的解釋:
@Configuration:用於標註配置類,讓Spring來加載該類配置作爲Bean的載體。在運行時,將爲這些Bean生成BeanDefinition和服務請求。
@Bean:產生一個Bean,並交給Spring管理。目的是封裝用戶、數據庫中的數據,一般有Setter、Getter方法。
package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.example.demo.entity.User;
@Configuration//用於標註配置類
public class UserConfig {
//將次返回的值生成一個Bean
@Bean("user1")//產生一個Bean,並交給Spring管理
public User user(){
User user=new User();
user.setId(1);
user.setName("lishizheng");
return user;
}
}
3.編寫測試類
實例化一個User對象,然後獲取Bean對象user1,該代碼位於test文件夾之下
剛入門的時候這裏踩坑:IDEA中cannot resolve method getBean in applicationContext的解決方法
代碼解釋
@SpringBootTest:Spring Boot用於測試的註解,可指定入口類或測試環境等。
@RunWith():讓測試運行於Spring測試環境
@Test:一個測試方法
ApplicationContext:獲取Spring容器中已初始化的Bean,這裏是user1
package com.example.demo.config;
import com.example.demo.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class IoCTest {
@Autowired
private ApplicationContext applicationContext;
@Test
public void testIoC(){
//實例化User對象,通過上下文獲取Bean對象user1
User user=(User)applicationContext.getBean("user1");
//在控制檯中打印User數據
System.out.println(user);
}
}