業務實現基於 SpringBoot腳手架,並不是框架java
package com.cy.pj.common.cache; @Component public class DefaultCache {}
@Component是Spring中用於描述Bean類的一個註解。用於告訴Spring這個類的實例由Spring建立,當此對象由Spring建立和管理時,默認會將對象存儲到池(Bean池)中。spring
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框架要爲此屬性注入一個值?(至於注入規則,後面課程慢慢增強)框架
描述了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"); } }
singleton(整個內存有一份Bean實例,此實例什麼時候建立與類的延遲加載特性配置有關,此實例建立之後,生命週期會由spring框架管理),prototype(每次獲取都會建立新實例,此實例會在須要時建立與lazy特性無關,這個實例建立之後,不會交給spring管理,spring能夠對其初始化,但不負責銷燬。)等。設計
Spring 是一個資源整合框架(Framework),經過spring可將不少資源(本身寫的對象或第三方提供的對象,例如鏈接池等)整合在一塊兒,而後進行科學應用,以便更好的對外提供服務.code
思考:對象
@Autowired由spring框架定義,用於描述類中屬性或相關方法(例如構造方法)。Spring框架在項目運行時假如發現由他管理的Bean對象中有使用@Autowired註解描述的屬性或方法,能夠按照指定規則爲屬性賦值(DI)。其基本規則是:首先要檢測容器中是否有與屬性或方法參數類型相匹配的對象,假若有而且只有一個則直接注入。其次,假如檢測到有多個,還會按照@Autowired描述的屬性或方法參數名查找是否有名字匹配的對象,有則直接注入,沒有則拋出異常。最後,假如咱們有明確要求,必需要注入類型爲指定類型,名字爲指定名字的對象還可使用@Qualifier註解對其屬性或參數進行描述(此註解必須配合@Autowired註解使用)。blog