Spring Boot02

1.項目業務初步實現及測試

業務實現基於 SpringBoot腳手架,並不是框架java

①步建立一個DefaultCache類,存儲到src/main/java目錄,而後交給spring管理
package com.cy.pj.common.cache;

@Component

public class DefaultCache {}

@Component是Spring中用於描述Bean類的一個註解。用於告訴Spring這個類的實例由Spring建立,當此對象由Spring建立和管理時,默認會將對象存儲到池(Bean池)中。spring

②步 添加sringboot 測試類,進行bean的獲取及測試,要放在src/test/java目錄
package com.cy.pj.common.cache;

@SpringBootTest

public class DefaultCacheTests {

@Autowired

private DefaultCache defaultCache;

@Test

public void testCache() {

System.out.println(defaultCache);
}
}

@SpringBootTest 註解用於告訴spring框架,此測試類交給spring管理。
@Autowired註解描述屬性時,用於告訴spring框架要爲此屬性注入一個值?(至於注入規則,後面課程慢慢增強)框架

③步代碼設計及運行分析

image.png
描述了DefaultCacheTests類與DefaultCache類的關係,兩個類經過指定註解(@SpringBootTest,@Component)進行了描述,其意圖是告訴spring框架這個兩個類的實例的建立由Spring負責,而且由Spring框架基於@Autowired註解的描述完成DefaultCacheTests實例中有關DefaultCache類型的值的注入(DI)。測試

第④步:爲對象設計做用域,設置延遲加載,設置生命週期方法(瞭解)。spa

在Spring框架中,Spring爲由它建立和管理的對象,設計了一些特性,例如做用域,延遲加載,生命週期方法等,基於這些特性實現對Bean對象的管理。prototype

package com.cy.pj.common.pool;
@Component
@Scope("singleton")

@Lazy

public class ObjectPool {

public ObjectPool() {

 System.out.println("ObjectPool()");

}

@PostConstruct

public void init() {

System.out.println("init()");

}

@PreDestroy

public void destory() {

System.out.println("destory");

}

}
  • @Lazy註解用於描述類,其目的是告訴spring框架此類支持延遲加載,一般會配合單例做用域使用。
  • @Scope 是Spring中用於定義Bean對象做用域的一個註解,其經常使用的值有

singleton(整個內存有一份Bean實例,此實例什麼時候建立與類的延遲加載特性配置有關,此實例建立之後,生命週期會由spring框架管理),prototype(每次獲取都會建立新實例,此實例會在須要時建立與lazy特性無關,這個實例建立之後,不會交給spring管理,spring能夠對其初始化,但不負責銷燬。)等。設計

  • @PostConstruct 註解用於描述bean對象生命週期方法中的初始化方法,此方法會在對象的構造方法以後執行(是對象建立之後的初始化)。
  • @PreDestroy 註解用於描述Bean對象生命週期方法中的銷燬方法,此方法會在對象銷燬以前執行(看成用域爲prototype時,此方法不會執行)。
⑤步經過測試類測試做用域,延遲加載,生命週期方法

image.png

Spring框架管理Bean對象有什麼優點嗎

Spring 是一個資源整合框架(Framework),經過spring可將不少資源(本身寫的對象或第三方提供的對象,例如鏈接池等)整合在一塊兒,而後進行科學應用,以便更好的對外提供服務.code

image.png
思考:對象

  1. @Autowired註解應用規則?
  2. @Qualifier註解的做用是什麼?

@Autowired由spring框架定義,用於描述類中屬性或相關方法(例如構造方法)。Spring框架在項目運行時假如發現由他管理的Bean對象中有使用@Autowired註解描述的屬性或方法,能夠按照指定規則爲屬性賦值(DI)。其基本規則是:首先要檢測容器中是否有與屬性或方法參數類型相匹配的對象,假若有而且只有一個則直接注入。其次,假如檢測到有多個,還會按照@Autowired描述的屬性或方法參數名查找是否有名字匹配的對象,有則直接注入,沒有則拋出異常。最後,假如咱們有明確要求,必需要注入類型爲指定類型,名字爲指定名字的對象還可使用@Qualifier註解對其屬性或參數進行描述(此註解必須配合@Autowired註解使用)。blog

Spring Boot小結

  • Spring boot 是什麼? (框架,也能夠當作是框架腳手架,作了架子工要作的事情-搭建項目基礎骨架的工做人員)
  • Spring boot 核心優點?(啓動依賴,自動配置-開箱即用,健康檢查-系統監控)
  • Spring boot 項目的建立方式?( https://start.spring.io)
  • Spring boot項目啓動時,Bean的初始化過程是怎樣的?(查找,加載,讀和存儲配置,建立和存儲實例對象)
  • Spring boot 項目啓動時,Bean對象的依賴注入過程是怎樣的?(標記,查找,注入)
  • Spring 框架中的Bean對象有什麼特性?(延遲加載,做用域,生命週期方法)
  • Spring 框架中單例(singleton)做用域對象特色,應用場景(頻繁用)?
  • Spring 框架中多例(prototype)做用域對象特色,應用場景(稀少用)?
  • Spring管理bean對象時有什麼優點?(爲bean賦予了更加高級的特性,懶加載,單例做用域,生命週期方法)
相關文章
相關標籤/搜索