天天看點

CDI關于堆棧溢出

CDI關于堆棧溢出我注意到的是反複出現的錯誤(或誤解)是,人們不知道他們不應該執行個體化他們想要注入他們的依賴項的對象。

他們認為當他們這麼做的時候

Foo foo = new Foo()

的依賴關系。

Foo

會在春天注射。不,他們不會的。這是于這樣一個問題:

首先,也是最重要的--所有的Springbean都被管理--它們“活”在一個容器中,稱為“應用程式上下文”。

其次,每個應用程式都有一個指向該上下文的入口點。Web應用程式有一個servlet,JSF使用一個el-解析器,等等。還有一個地方,應用程式上下文是引導的,所有bean都是自動加載的。在Web應用程式中,這可以是一個啟動監聽器。

自動裝配是通過将一個bean的執行個體放入另一個bean執行個體中所需的字段來實作的。這兩個類都應該是bean,也就是說,它們應該被定義為存在于應用程式上下文中。

應用程式上下文中的“生活”是什麼?這意味着上下文執行個體化對象,而不是您。也就是說,你從來沒有做過新的UserServiceImpl()-容器找到每個注入點并在那裡設定一個執行個體。

是以不要自己執行個體化對象。将它們配置為由Spring執行個體化(通過XML、注釋或java配置)。

https://www.imdb.com/list/ls508589799/

(FYI:有一種方法可以将依賴項注入到由使用者而不是容器執行個體化的對象中。簡而言之,它使用AspectJ編織:它進行位元組碼修改,以便每當一個對象被執行個體化時,它就由容器來管理。但這是“黑魔法”,在預設情況下不是“開啟”。而且在許多DI架構中肯定不支援它)

他們說,開發Java是緩慢的,因為臃腫的應用伺服器-您必須重新部署應用程式,以檢視您的變化。PHP、Python等腳本語言允許您“儲存和重新整理結了“神話”。

是的,這是個神話。您也可以在java web應用程式中使用“儲存和重新整理”。JVM有所在運作時替換類。是以,您隻需在調試模式下啟動伺服器(在調試模式下可以使用hotswap功能)并複制類檔案。對于Eclipse,可以(至少)以兩種方式完成:

  • WTP-将“部署程式集”配置為将已編譯的類發送到Web-INF/class
  • Eclipse插件-将其配置為将編譯好的類發送到絕對路徑(Tomcat居住的地方)

https://www.douban.com/note/814495578/

我已經對如何使用它們做了更廣泛的

當然,這裡有個陷阱。你不能交換結構變化。如果添加新類、新方法、更改方法參數、添加字段、添加注釋,則在運作時不能交換這些參數。但是,“儲存和重新整理”通

https://www.jianshu.com/p/7d80d0dfd79b

常隻涉及更改方法中的一行。結構變化比較少見,在某些情況下意味着整個應用程式必須重新初始化。您也不能進行hotswap配置--您的應用程式通常是在某個(.xml)檔案中配置的,是以如果您更改了它,就必須重新部署。但是,這似乎是一個很普通的場景--你的應用程式不能隻是在運作時加載它的引導配置。

更常見的情況是html&CSS更改。沒有“儲存和更新”,你就活不下去了。但是這非常好--JSP由servlet容器重新整理(除非您處于生産模式),而且每種視圖技術都有一個動态選擇模闆檔案的選項。這與JVM無關。