spring------ioc理解

IOC概念理解

???ioc:Inversion of control。又名:控制反轉(zhuǎn)。它是一種設(shè)計思想。在開發(fā)中,ioc意味著將依賴對象交給容器控制,而不是傳統(tǒng)的在對象中直接控制。

???在以往的時候,我們使用依賴對象,都是通過new一個對象出來,對象之間進行耦合。隨著系統(tǒng)的復(fù)雜,對象之間的耦合度越高,系統(tǒng)改造、維護等都會帶來一定障礙。而且也與軟件設(shè)計的低耦合目標(biāo)不一致。為了解決對象之間耦合度過高的問題,spring的ioc框架出爐了。

???控制反轉(zhuǎn),是相對于“正”,才有“反”的說法。什么是“正”呢?正是指,對于依賴對象主動的去創(chuàng)建,去控制,什么時候創(chuàng)建、使用,是由程序主動控制的。反則是指,由容器來幫忙創(chuàng)建和注入依賴對象。由原來的主動,變?yōu)楸粍咏邮?,所以是反轉(zhuǎn)。

???控制反轉(zhuǎn),又名:依賴注入。依賴注入是指程序運行期間,動態(tài)的向某個對象提供它所需要的其它對象??刂品崔D(zhuǎn)和依賴注入是從不同角度描述的同一件事,那就是:通過引入IOC容器,通過依賴注入的方式,實現(xiàn)對象之間的解耦。

spring注入的三種方式

1.屬性注入2.構(gòu)造方式注入3.工廠方式注入

1. 屬性注入

???屬性注入是通過setter的方法注入到bean對象的屬性值中的。使用標(biāo)簽<property>,name指定bean屬性名,value指定屬性值。屬性的注入是通過對象中的set方法注入。如:定義一個Teacher類,有屬性name和age,則注入是通過setName()和setAge()兩個方法注入的。bean屬性,要與對象中的set方法一一對應(yīng)。

如:對應(yīng)的Teacher對象中:

publicclassTeacher {privateStringname;privateStringage;publicvoidsetName(Stringname) {this.name = name;? ? }publicStringgetName() {returnname;? ? }publicvoidsetAge(Stringage) {this.age = age;? ? }publicStringgetAge() {returnage;? ? }

對應(yīng)的測試類:

@Testpublicvoidtest001(){? ? ? ? ApplicationContext ctx =newClassPathXmlApplicationContext("beans.xml");? ? ? ? Teacher teacher = (Teacher) ctx.getBean("teacher");? ? ? ? System.out.println(teacher);? ? }

測試結(jié)果為:

Teacher{name='王老師',age='22'}

2. 構(gòu)造注入

???構(gòu)造方法注入bean對象的屬性值或者依賴對象,可以在實例化后,直接使用,相當(dāng)于有默認值。

???構(gòu)造注入使用標(biāo)簽<constructor-arg>,這個標(biāo)簽中沒有name,有value,通過value為屬性值賦值。其中注入屬性的個數(shù)一定與構(gòu)造函數(shù)的參數(shù)一一對應(yīng)。在這個標(biāo)簽中,還可以使用type指定參數(shù)類型,如遇到特殊字符,可使用<![CDATA[]]>包裹。 如:Dog類的bean配置文件

]]>

Dog的構(gòu)造函數(shù)

publicclass Dog {privateStringcolor;privateStringname;publicDog(Stringname,Stringcolor){this.name = name;this.color=color;? ? }

測試類

@Testpublicvoidtest002(){? ? ? ? ApplicationContext ctx =newClassPathXmlApplicationContext("beans.xml");? ? ? ? Dog dog = (Dog) ctx.getBean("dog");? ? ? ? System.out.println(dog);? ? }

執(zhí)行結(jié)果:

Dog{color='<小黃>',name='白色'}

???bean之間還可以使用<property>的ref屬性建立bean之間的引用關(guān)系。如:為teaher這個bean關(guān)聯(lián)上dog,<property name="dog" ref="dog"></property>。在執(zhí)行結(jié)果中,可以看到:

Teacher{name='王老師',age='22',dog=Dog{color='<白色>',name='小黃'}}

對list集合的屬性注入

]]>

在對象Teacher中加上private List dogs;的set和get方法。執(zhí)行以后得到的結(jié)果為:

Teacher{name='王老師',age='22',dog=null, dogs=[Dog{color='<白色>',name='小黃'}, Dog{color='黑色',name='小黑'}, Dog{color='花色',name='小花'}]}

最后

我保證我寫的都是經(jīng)過驗證的,歡迎關(guān)注和交流。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容