1,ioc的概念java
Inverse of control ,控制反轉,實際的意義是調用類對接口實現類的依賴,反轉給第三方的容器管理,從而實現鬆散耦合;web
ioc的實現方式有三種,屬性注入,構造函數注入,接口注入,經常使用的是前面兩種,後面的對類的侵入性太大,通常不用;spring
spring就是一個第三方的依賴管理+容器,很輕鬆高效的實現了實例的建立,依賴關係的管理等底層功能,此外,還有Guice,plexus等第三方容器。apache
2,反射服務器
每一個對象在jre中都有一個Class對象,保存着它的元數據信息,經過Class對象,能夠間接的訪問對象的屬性和方法;app
類加載器:四類類加載器:函數
加載器 | 說明 | 補充 |
根加載器 | 加載jre的核心類庫 | |
ExtClassLoader | 加載jre的擴展類庫 | |
AppClassLoader | 加載項目的classpath下的類 | |
自定義ClassLoader | 具體用途來定 |
採用全盤負責委託機制,即除非顯示使用另一個ClassLoader,或者使用原來的classLoader加載該類,以及引用類,依賴類;先委託父加載器尋找目標類,找不到的狀況下再從本身的類路徑中查找並裝載目標類;ui
利用反射獲取構造方法,方法,字段,包,註解等信息,實例略;spa
3,資源接口日誌
Resource,
實現類:
來個例子:
@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 + " 內容:" + content); }
執行結果:
2013-11-20 11:28:59 web.TestResource.getResource(32)---[0]
[INFO] log4j.properties 內容: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風格和特殊標識:
特殊標識 | 意義 |
classpath: | 類路徑中加載 |
file: | 文件目錄中加載,可以使用絕對路徑 |
ftp:// | ftp服務器中加載 |
http:// | http服務器中加載 |
? | 匹配一個字符 |
* | 匹配任意個字符 |
** | 匹配多級路徑 |
實現類:
不過spring中最經常使用的是PathMatchResourcePatternResolver,支持ant風格和特殊標識
4,三大接口BeanFactory ,ApplicationContext,WebApplicationContext的理解
先看BeanFactory,最多見的是XmlBeanFactory,來張層級圖;
各類接口定義了XmlBeanFactory的功能:
接口 | 功能 |
BeanFactory | 獲取bean,簡稱,判斷是否存在,是否單例 |
ListableBeanFactory | 集合形式查看bean |
ApplicationContext, spring容器,層級圖,經過繼承相關的接口,有了相關的功能;
能夠經過xml,註解,java類來配置ApplicationContext
BeanFacotry是惰性初始化,第一次調用的時候纔會組裝好資源;
ApplicationContext是啓動的時候初始化好了全部的資源;
WebApplicationContext ,spring web容器;
spring web 容器依賴ServletContext,在web項目中必須配置才能完成啓動,同時必須配置日誌依賴;
能夠經過ContextLoaderServlet(如今的最新版本里已經去掉 3.2.5)或者ContextLoaderListener來完成啓動
5,bean的生命週期
BeanFactory
返回 | 說明 |
bean自身的方法 | 經過構造函數實例化,set,get方法設置屬性,init,destroy方法初始化或者銷燬 |
Bean級別生命週期接口 | BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean |
容器級別生命週期接口 | InstantiationAwareBeanPostProcessor,BeanPostProcessor |
ApplicationContext
同BeanFactory,可是會自動識別和裝配後處理器;