spring底層原理解析


 

 

 

 

 

 

注解測試:如何使用注解(去掉配置文件)開發

新建MainConfig類

注解測試:新建MainTest2注解測試,用來測試//AnnoatationConfigApplicationContext: 注解配置來獲取IOC容器

 

2.1 操作:新建cap2文件夾,新建Cap2MainConfig.java配置類

作用:指定要掃描的包

  

 

1,@ComponentScan(value="com.enjoy.cap2")表示掃描此目錄下的包

2,建立測試用例方法;

 


 

2.2 新建Cap2MainConfig2配置類

作用:定制包掃描時的過濾規則

新建dao, service,controller


 

Cap2MainConfig2加入配置: @Filter: 掃描規則

 @ComponentScan(value="com.enjoy.cap2",includeFilters={     @Filter(type=FilterType.ANNOTATION,classes={Controller.class}),        @Filter(type=FilterType.ASSIGNABLE_TYPE,classes={BookService.class})

},useDefaultFilters=false) //默認是true,掃描所有組件,要改成false,使用自定義掃描范圍

*/

//@ComponentScan value:指定要掃描的包

//excludeFilters = Filter[] 指定掃描的時候按照什么規則排除那些組件

//includeFilters = Filter[] 指定掃描的時候只需要包含哪些組件

//useDefaultFilters = false 默認是true,掃描所有組件,要改成false

//----掃描規則如下

//FilterType.ANNOTATION:按照注解

//FilterType.ASSIGNABLE_TYPE:按照給定的類型;比如按BookService類型

//FilterType.ASPECTJ:使用ASPECTJ表達式

//FilterType.REGEX:使用正則指定

//FilterType.CUSTOM:使用自定義規則,自已寫類,實現TypeFilter接口

 

 

 

//FilterType.CUSTOM的例子,常用

先新增自定義過濾規則類:

 


Cap2MainConfig申明

@ComponentScan(value="com.enjoy.cap2",includeFilters={

       @Filter(type=FilterType.CUSTOM,classes={JamesTypeFilters.class})

},useDefaultFilters=false)

publicclassCap2MainConfig2 {}

 

 

1,新建Cap3MainConfig.java

 

 

2,沒加@Scope之前, 默認的bean是單實例的. 新建 test01()方法測試如下:

 

 

返回true, 證明取到的是同一個person bean,只實例化了一次.

 

3, 加入@Scope(“prototype”) //多實例

prototype: 多實例:IOC容器啟動並不會去調用方法創建對象放在容器中,而是                                                                  每次獲取的時候才會調用方法創建對象,見test02

singleton: 單實例(默認):IOC容器啟動會調用方法創建對象放到IOC容器中

以后每交獲取就是直接從容器(理解成從map.get對象)中拿 

request:  主要針對WEB應用,同一次請求創建一個實例

session:  同一個session創建一個實例(后面兩個用得不多,了解即可

 

1,新建Cap4MainConfig.java

 

 

 

2,建立測試用例test01();

 

 

當在Cap4MainConfig加入@Lazy時,  只有獲取anno.getBean時才會加載到IOC容器中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM