spring主要是ioc和aop,本文主要講解ioc的簡單使用。ioc,即控制反轉,即通過配置檔案來建立物件,當然還通過註解來建立物件。總的來說,不使用new來建立物件等。
物件的建立過程實際上是將物件註冊到ioc容器中,再通過getbean()取出的過程。根據配置不同分為基於xml配置檔案和基於註解方式。但不管怎麼樣,兩者都是為了將bean物件配置到ioc容器中。
//基於xml
//基於註解
student student = (student) context.getbean("student");需要注意的是,當獲得context時(快載入),spring已經將所有的需要註冊的bean都進行了例項化和屬性注入,然後放到了ioc容器中(concurrenthashmap),getbean()只是從該容器中獲得對應物件而已
其原理簡單來講(包括後面的原理只是大概實現了思想,表明各個屬性的含義,原始碼實現更為複雜)是:通過讀取配置檔案,獲得id的值和class的值,那麼通過反射獲取物件,再將id和object以鍵值對放入容器
classname = ... //獲得xml配置內容
id = ... //獲得xml配置內容
class c = class.forname(classname);//反射
object obj = c.newinstance();//反射
map.put(id,object);//偽**,將id與object放入ioc容器中
首先,得有個工廠類,裡面有個靜態方法。
public class staticfactory }
接下來就是在配置檔案中配置該工廠,與①不同的是,我們需要使用factory-method來指定哪乙個方法是工廠方法
這樣就會將newcat()產生的cat物件,以id值為key加入到ioc容器中。原理依舊是反射
class c = class.forname(classname);//反射獲取class物件
method method = c.getmethod(methodname);//獲得指定的方法
object objec = method.invoke(null);//由於是靜態方法,因此使用null來呼叫獲得返回值物件
首先要有乙個動態工廠類,就把靜態工廠類的newcat()的static去掉即可。(**略)
接下來就是配置,由於是動態工廠,因此還必須指定工廠的物件,即增加了factory-bean屬性來指定工廠的物件,因此需要先將動態工廠註冊進入ioc容器。
原理與靜態工廠類似,只不過需要通過factory-bean來從ioc容器中獲得factory物件,再呼叫方法
string classname = ...;
string methodname = ...;
object factory = ...;//通過factory-bean從ioc容器中獲得
class c = class.forname(classname);//反射
method method = c.getmethod(methodname);//反射
object objec = method.invoke(factory);//反射獲得返回值
但是此時只是開啟了註解,真正將物件加入ioc容器的註解是@component("id值");如果未指定id值則預設為類名的首字元小寫
@component("cat")
public class cat implements pet
這是普通方法的配置過程,對於兩種工廠方法,spring3和spring4版本引入了新的註解@bean(),name值為存入的id,無論是動態工廠還是靜態工廠都需要在工廠類上使用@component來出建立
@component
public class staticfactory
}
如果工廠方法有引數,系統會自動注入(注入操作會在後面講解)
在配置類中,首先需要使用@configuration來表示該類是乙個配置類。
在xml檔案中,我們還殘留乙個開啟註解的配置,在配置類中使用@componentscan("要掃瞄的包")來代替
如果有多個配置類,@import匯入,且子配置類不需要@configuration和@componentscan
也可以使用@propertysource("檔案位置")來載入指定位置的properties檔案
@configuration
@componentscan("test")
public class config
至此,我們已經能夠通過spring來建立物件了 一 物件模型
在ruby程式中,物件僅僅是其大世界的乙個公民而已,除了物件還有其他語言構件,比如類 class 模組 module 以及例項變數 imstance variable 等,元程式設計操控的就是這些語言構件。所有語言構件存在於其中的系統稱為物件模型,它是ruby的靈魂。1 物件由一組例項變數和乙個類的...
物件導向(一) 物件屬性
物件屬性型別 每個物件都是基於乙個引用型別建立的 1.資料屬性 2.訪問器屬性 4個特性 1.configurable 能否delete屬性從而重新定義屬性 能否修改屬性的特性 能否把屬性改為訪問器屬性 2.enumerable 能否用for in迴圈返回屬性 3.writable 能否修改屬性的值...
物件導向(一) 物件屬性
物件屬性型別 每個物件都是基於乙個引用型別建立的 1.資料屬性 2.訪問器屬性 4個特性 1.configurable 能否delete屬性從而重新定義屬性 能否修改屬性的特性 能否把屬性改為訪問器屬性 2.enumerable 能否用for in迴圈返回屬性 3.writable 能否修改屬性的值...