在磁盤中有不少的Class文件,運行時要把磁盤中的文件讀到JVM的內存中(須要用到線程和I/O),系統底層會建立一個BeanDefinition對象用於存儲bean的配置信息,多個class文件就會建立多個BeanDefinition對象,這些對象存放在一個Map<String,BeanDefinition>集合中(包,註解....),經過工廠建立Bean Instance(Bean的實例)存儲在Map<String,Object>中,其中String中存儲的是名字,能夠在@Component註解中指定名字,如果不指定名字則類名首字母小寫爲默認名字,在構建Bean對象的時候,先查找Bean的配置信息,在找不到的時候就會報錯
任何一個項目都有一個啓動入口,在springboot中的啓動類須要有@SpringBootApplication 註解進行描述,而且在列中會定義一個main方法,main方法在運行時會讀取配置文件,並加載指定資源,而後進行初始化操做
描述了DefaultCacheTests類與DefaultCache類的關係,這兩個類經過指定註解(@SpringBootTest,@Component)進行了描述,其意圖是告訴spring框架這個兩個類的實例的建立由Spring負責,而且由Spring框架基於@Autowired註解的描述完成DefaultCacheTests實例中有關DefaultCache類型的值的注入(DI)。
a)SpringBoot官方定義(通常爲一些基礎配置)例如 spring.factories(在SpringBoot自動配置依賴中) b) 第三方定義(例如日誌系統-log4j.xml...) c) 咱們本身定義(application.properties)
a)JDK類文件 b)Spring類文件 c)本身定義的類文件 JVM參數:-XX:+TraceClassLoading(跟蹤類加載)
JVM參數錄入路徑:類名右鍵Run As選擇Run Configurations 1.選擇Arguments 2.錄入在main方法中的形參(String[] arg)這裏面寫的就是arg中的值 3.將須要執行的JVM參數放入三種,點擊Run執行 任意項目總體執行順序打開JDK包-->加載Object類-->加載Serializable(序列化)-->加載Comparable(比較類)-->加載CharSequence(字符序列)-->加載String(字符串類)
PS:當執行後沒有顯示出第一條數據時,能夠調整顯示的字符個數如圖所示調整控制檯輸出字符個數:
spring
a)構建實例對象 b)基於對象存儲數據(例如配置信息,默認值)
a)啓動包,在啓動包中添加代碼邏輯,並且執行類必定要在啓動包下或子包下 b)配置包,將全部的配置信息文件寫在配置包中 c)單元測試包,在單元測試包中寫入測試代碼,測試類必定要寫在單元測試包下或子包下
任何一個項目都有一個啓動入口,在springboot中的啓動類須要有@SpringBootApplication 註解進行描述,而且在列中會定義一個main方法,main方法在運行時會讀取配置文件,並加載指定資源,而後進行初始化操做
將類使用spring框架中指定註解進行描述,例如@Component註解起的做用就是作標記
@SpringBootTest註解是SpringBoot工程中的單元測試類須要使用此註解進行描述
單元測試類註解,與普通的測試類註解使用方法相同,要注意導包,SpringBoot項目中導入的@Test包爲org.junit.jupiter.api.Test 測試方法不能夠用private修飾也不能夠有返回值以及參數
類實現了一個接口或是繼承了一個類是is a
在某一類中有一個屬性是has a
在某一個類中某個方法中使用了某個類是use a
註解修飾的類就是告訴spring容器這個類在用不到的時候先不要建立能夠在後面添加值通常默認爲true(@Lazy(true),@Lazy(value=true))true/false就是設置註解是否延時加載
沒有寫可是默認就是這個註解,默認爲單例做用域,這個類的實例在一個Spring容器中只能有一份,由於只有一份,因此在後來必定要考慮線程安全
每次從Spring容器中獲取對象都會建立一個新的實例,不會存儲在Spring的Bean池中
註解描述的方法會在**對象構建之後執行!!!**先執行對象的構造方法後再執行註解修飾的方法,用於執行一些初始化操做,好比在構建池的時候初始化池的參數、大小、鏈接超時時間......
註解描述的方法會在單例對象銷燬以前執行,Spring容器(Bean池)在銷燬以前會先將容器中的對象進行移除在移除對象時,假如對象中定義了生命週期銷燬方法,此時還會調用對象的生命週期銷燬方法(在這樣的方法中能夠作一席而資源釋放操做)
在出現錯誤問題時首先要先找Cased by(緣由)
錯誤概述:
在spring容器中沒有Bean類型的定義。
出現這類問題的可能:
一、啓動類的包沒有放在指定的位置下,沒有在啓動包或啓動包的子包下
二、註解錯誤api
通常來講,在系統啓動的同時就建立對象,經過在類中準備構造函數,在運行項目的同時會執行構造方法中的代碼
會影響電腦速度,搶佔內存
按需加載,對於佔用內存較多的對象,儘可能使用在有須要的時候在加載
Spring容器只能銷燬或是移除單例對象,多例對象不會存儲在Spring的Bean池中,多以不會銷燬或移除
首先Spring爲你的Bean賦予了延遲加載、做用域、生命週期方法,基於這些特性能夠更加科學的使用對象,