黃鳥(niǎo)抓包動(dòng)態(tài)注入 spring依賴除了(set注入,構(gòu)造方法注入)還有哪種注入方式?
spring依賴除了(set注入,構(gòu)造方法注入)還有哪種注入方式?除了set和constructor之外,還有工廠注入。工廠注射可分為動(dòng)態(tài)工廠注射和靜態(tài)工廠注射。在特定操作期間,bean標(biāo)記上有一個(gè)f
spring依賴除了(set注入,構(gòu)造方法注入)還有哪種注入方式?
除了set和constructor之外,還有工廠注入。工廠注射可分為動(dòng)態(tài)工廠注射和靜態(tài)工廠注射。在特定操作期間,bean標(biāo)記上有一個(gè)factory method屬性來(lái)編寫(xiě)工廠方法。靜態(tài)工廠和動(dòng)態(tài)工廠沒(méi)有區(qū)別。還有一種情況是屬性注入。Spring或其他與Spring合作的框架提供了一系列有意識(shí)的接口供您直接使用
控制反轉(zhuǎn)和容器IOC只能看作是一種編程思想。在理想狀態(tài)下,可以實(shí)現(xiàn)自動(dòng)注射和生命周期管理。但是,在實(shí)際的發(fā)展中,我個(gè)人覺(jué)得有時(shí)不如新的方便。我主要遇到以下問(wèn)題:
1。編寫(xiě)大量的配置和構(gòu)造函數(shù)比編寫(xiě)新的更麻煩,特別是對(duì)于某些函數(shù),項(xiàng)目只使用一次。原來(lái),new會(huì)立即完成,但是如果你想使用依賴注入,你仍然需要編寫(xiě)配置
2。當(dāng)需要注入更多的類時(shí),構(gòu)造函數(shù)就像老婦人的裹尸布一樣臭,一樣長(zhǎng)。關(guān)鍵是以前用過(guò)的一些類現(xiàn)在不用了,你要手動(dòng)清理構(gòu)造函數(shù),這比new要麻煩多了
3。這也是最關(guān)鍵的一點(diǎn),有時(shí)項(xiàng)目的復(fù)雜性很復(fù)雜,會(huì)遇到循環(huán)注入的問(wèn)題。也就是說(shuō),A依賴B,B依賴C,C依賴A,這種情況說(shuō)明架構(gòu)的存在是不合理的。在這一點(diǎn)上,您可以重構(gòu)系統(tǒng),也可以不直接使用依賴注入來(lái)解決它。]總之,依賴注入只是一種編程思想,具有一些高級(jí)特性。它不是萬(wàn)能的。它存在的意義是脫鉤。從宏觀上講,就是要解決多人共同開(kāi)發(fā)一個(gè)項(xiàng)目時(shí),各自獨(dú)立的模塊,減少相互之間的依賴和干擾。從微觀的角度看,有幾個(gè)類是密切相關(guān)的。雖然文件是獨(dú)立的,但是功能是集成的。在這個(gè)時(shí)候,脫鉤是沒(méi)有意義的。為什么不是新的?
因此,我個(gè)人理解依賴注入與引擎是一樣的。發(fā)動(dòng)機(jī)由幾個(gè)主要部件組成。這些組件之間是解耦的,可以通過(guò)依賴注入來(lái)實(shí)現(xiàn)。對(duì)于單個(gè)組件的內(nèi)部部件和螺釘,必須使用依賴注入來(lái)實(shí)現(xiàn)它們。這比收益多一點(diǎn)。使用new來(lái)實(shí)現(xiàn)它們要方便得多。。?!景潜亲印俊景潜亲印俊景潜亲印俊景潜亲印俊景潜亲?/p>
注射與鉤子密切相關(guān)。我們通常一起談?wù)撨@兩者,這使許多人認(rèn)為它們是同一件事。在應(yīng)用程序安全中有一個(gè)稱為完整性的概念,這意味著程序或數(shù)據(jù)不能被攻擊者惡意篡改。根據(jù)篡改的時(shí)間,破壞應(yīng)用程序完整性的方法有兩種:靜態(tài)和動(dòng)態(tài)。在Android上,靜態(tài)篡改方法是反編譯APK,修改或添加代碼并重新打包。只要用戶安裝了修改后的APK,攻擊者的代碼就會(huì)加載到進(jìn)程空間中。動(dòng)態(tài)篡改方法是hook。如果我想篡改代碼,我想實(shí)現(xiàn)的是控制程序在執(zhí)行一段邏輯時(shí)執(zhí)行我的代碼。這種行為稱為鉤子。運(yùn)行時(shí)程序被表示為一個(gè)進(jìn)程,在它自己的進(jìn)程中有代碼和數(shù)據(jù)。所以問(wèn)題是操作系統(tǒng)隔離了進(jìn)程。我的代碼在我的流程中,其他人的代碼在其他人的流程中。其他人的進(jìn)程不能跳轉(zhuǎn)到我的進(jìn)程來(lái)執(zhí)行我的代碼。我能做什么?因此,我們需要找到一種方法,首先將代碼注入到其他人的進(jìn)程中。前面提到的重新包裝也是一種靜態(tài)注入方法。動(dòng)態(tài)注入方法類似于Android上的Linux共享庫(kù)注入。網(wǎng)絡(luò)上最常用的方法應(yīng)該是看學(xué)古河發(fā)布的libinject。另外,還有xposed,它采用了一種特殊的注入方式,是動(dòng)靜結(jié)合的。