spring筆記5 spring IOC的基礎(chǔ)知識1
1,ioc的概念
Inverse of control ,控制反轉(zhuǎn),實際的意義是調(diào)用類對接口實現(xiàn)類的依賴,反轉(zhuǎn)給第三方的容器管理,從而實現(xiàn)松散耦合;
ioc的實現(xiàn)方式有三種,屬性注入,構(gòu)造函數(shù)注入,接口注入,常用的是前面兩種,后面的對類的侵入性太大,一般不用;
spring就是一個第三方的依賴管理+容器,很輕松高效的實現(xiàn)了實例的創(chuàng)建,依賴關(guān)系的管理等底層功能,此外,還有Guice,plexus等第三方容器。
2,反射
每個對象在jre中都有一個Class對象,保存著它的元數(shù)據(jù)信息,通過Class對象,可以間接的訪問對象的屬性和方法;
類加載器:四類類加載器:
| 加載器 | 說明 | 補充 |
| 根加載器 | 加載jre的核心類庫 | |
| ExtClassLoader | 加載jre的擴展類庫 | |
| AppClassLoader | 加載項目的classpath下的類 | |
| 自定義ClassLoader | 具體用途來定 |
采用全盤負(fù)責(zé)委托機制,即除非顯示使用另外一個ClassLoader,或者使用原來的classLoader加載該類,以及引用類,依賴類;先委托父加載器尋找目標(biāo)類,找不到的情況下再從自己的類路徑中查找并裝載目標(biāo)類;
利用反射獲取構(gòu)造方法,方法,字段,包,注解等信息,實例略;
3,資源接口
Resource,
實現(xiàn)類:
來個例子:
@Test public void getResource() throws IOException { Resource resource =new ClassPathResource("log4j.properties"); String fileName= resource.getFilename(); String content= FileUtils.readFileToString(resource.getFile(), Charsets.UTF_8.name()); logger.info(fileName + " 內(nèi)容:" + content); }
執(zhí)行結(jié)果:
2013-11-20 11:28:59 web.TestResource.getResource(32)---[0]
[INFO] log4j.properties 內(nèi)容:log4j.rootCategory=INFO, stdout,file
###. ??????? stdout ????????????
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %C.%M(%L)---[%r]%n[%p] %m%n
spring定義了一套資源加載接口ResourceLoader:支持ant風(fēng)格和特殊標(biāo)識:
| 特殊標(biāo)識 | 意義 |
| classpath: | 類路徑中加載 |
| file: | 文件目錄中加載,可使用絕對路徑 |
| ftp:// | ftp服務(wù)器中加載 |
| http:// | http服務(wù)器中加載 |
| ? | 匹配一個字符 |
| * | 匹配任意個字符 |
| ** | 匹配多級路徑 |
實現(xiàn)類:

不過spring中最常用的是PathMatchResourcePatternResolver,支持ant風(fēng)格和特殊標(biāo)識
4,三大接口BeanFactory ,ApplicationContext,WebApplicationContext的理解
先看BeanFactory,最常見的是XmlBeanFactory,來張層級圖;

各種接口定義了XmlBeanFactory的功能:
| 接口 | 功能 |
| BeanFactory | 獲取bean,簡稱,判斷是否存在,是否單例 |
| ListableBeanFactory | 集合形式查看bean |
ApplicationContext, spring容器,層級圖,通過繼承相關(guān)的接口,有了相關(guān)的功能;

可以通過xml,注解,java類來配置ApplicationContext
BeanFacotry是惰性初始化,第一次調(diào)用的時候才會組裝好資源;
ApplicationContext是啟動的時候初始化好了所有的資源;
WebApplicationContext ,spring web容器;
spring web 容器依賴ServletContext,在web項目中必須配置才能完成啟動,同時必須配置日志依賴;
可以通過ContextLoaderServlet(現(xiàn)在的最新版本里已經(jīng)去掉 3.2.5)或者ContextLoaderListener來完成啟動
5,bean的生命周期
BeanFactory
| 返回 | 說明 |
| bean自身的方法 | 通過構(gòu)造函數(shù)實例化,set,get方法設(shè)置屬性,init,destroy方法初始化或者銷毀 |
| Bean級別生命周期接口 | BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean |
| 容器級別生命周期接口 | InstantiationAwareBeanPostProcessor,BeanPostProcessor |
ApplicationContext
同BeanFactory,但是會自動識別和裝配后處理器;

浙公網(wǎng)安備 33010602011771號