SpringBoot用容器IoC管理Bean

認識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);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章