注解測試:如何使用注解(去掉配置文件)開發
新建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容器中