Spring註解驅動知識點簡單記錄一
阿新 • • 發佈:2018-11-11
一:使用@Configuration和@Bean等元件替代xml方式將bean物件新增到spring容器中
- 建立一個實體類
- 建立配置類
註解解釋:
@Configuration:這個註解是告訴spring這是一個配置類,相當於xml檔案
@Bean:給容器註冊一個Bean,型別為返回值的型別,bean物件的id名稱預設為方法名,
也可以自定義bean的id名稱,例如:@Bean("person02"),那麼這個Person物件
的id名稱就是person02 - 測試類MainTest
⑴通過型別獲取bean物件
注意:AnnotationConfigApplicationContext:可以實現基於Java的配置類載入Spring的應用上下文
效果:
⑵ 通過id名稱獲取bean物件
效果:
⑶通過型別獲取bean的id名稱,然後通過id名稱獲取bean物件
效果:
二:自動掃描元件之@ComponentScan
- 簡介
@ComponentScan主要就是定義掃描的路徑從中找出標識了需要裝配 - 下面我們建立web,service,dao層的類
- 建立配置類
注意:
@ComponentScan:掃描com.test路徑下所有包的類 - 建立測試類
注意:如上圖,首先使用AnnotationConfigApplicationContext載入配置類MainConfig,獲取到
ApplicationContext上下文物件,然後通過這個上下文物件去獲取通過配置類掃描載入
那些使用註解建立的bean對像,例如通過@Controller,@Service,@Repository等注
解建立的bean物件。ApplicationContext上下文獲取到容器中的這些物件後打印出來。
效果:
- 下面我們在掃描載入並且建立bean物件到spring容器中時可以排除一些不需要建立的bean物件。
注意:
excludeFilters:表示在掃描載入的路徑下排除一些不需要載入到容器中的bean物件,
使用@Filter進行過濾,在@Filter中使用註解型別過濾, 這裡我們不
需要載入 Controller和Service型別的bean物件到容器中去。
執行測試類後的效果:
- 當然在@ComponentScan註解中還有其他的一些註解規則,例如includeFilters方法,表示
只加載建立哪些型別的bean物件。但是這個includeFilters必須和useDefaultFilters一起用才
會生效,否則不生效。
效果:
- 上面我們使用includeFilters指定過濾規則時使用了FilterType.ANNOTATION的方式
去過濾的,其實在FilterType中還有其他的方式,如下:
⑴FilterType.ANNOTATION:是按照註解方式
⑵FilterType.ASSIGNABLE_TYPE:是按照給定的型別,比如我們現在指定載入BookService型別。
效果:
⑶FilterType.ASPECTJ:使用ASPECTJ表示式方式(這個基本不會使用)
⑷FilterType.REGEX:使用正則表示式方式(這個不常使用)
⑸FilterType.CUSTOM:使用自定義規則方式,如下:
a:建立實現了TypeFilter的類
注意:
MetadataReader:表示的是讀取到的當前正在掃描的類的資訊
MetadataReaderFactory:表示可以獲取到其他任何類資訊
b:在配置類中使用我們自定義的過濾類
c:執行測試類的效果:
三:元件作用域之@Scope
- 簡介
@Scope作用域它存在4種情況:
a:prototype,表示多例項的,每一個獲取bean物件,都會建立一次
b:singleton,表示單例項的(預設的@Scope也是單例項的),在IOC容器啟動的時候就會呼叫方法建立
物件放到IOC容器中,以後每次獲取就是直接從容器中拿。
c:request,同一次請求建立一個例項
d:session,同一個session建立一個例項 - 建立一個配置類,建立person物件,並且預設為單例項
a:配置類
b:測試類
c:效果:
- 設定@Scope為多例項試試看效果:
測試類:
效果:
四:懶載入之@Lazy
- 簡介
首先懶載入是專門針對單例項bean的。單例項bean一般是預設在容器啟動的時候建立物件,而
如果我們使用懶載入後,就會變成容器啟動的時候不建立物件,會在第一次使用(獲取)bean物件
的時候去建立bean物件並且初始化。 - 例項:我們不使用懶載入時的效果:
a:配置類
b:測試類
c:效果
- 例項:我們使用懶載入時的效果:
a:在配置類建立person物件的方法上新增懶載入
b:測試類
c:效果