servlets中的構造函數被認爲是好的/壞習慣?它與init()
方法相比如何?使用servlet-3和vanilla javaEE(CDI提供的javax.inject包)Servlets - 使用構造函數還是不使用?
2
A
回答
4
在servlet中使用構造函數沒有任何問題。當您需要獲得ServletConfig
,ServletContext
等時,切換到init()
的原因是這些對象在構造函數中可能尚未提供(尚)。
另外假設一些容器可能會像servlet一樣使用動態子類或代理。最後,構造函數的副作用往往會使測試變得更加困難。
爲了避免意外的行爲,並確保您的servlet是100%便攜式的,只需使用init()
即可。此外,如果您還使用destroy()
以及執行init()
將使您的代碼更「對稱」。
又見
0
燁我們可以在servlet的構造函數,但它不是必需bcoz-
的servlet被初始化web容器。與其他java類不同,servlet未初始化。構造函數用於初始化顯式創建的對象,而servlet使用不同的方法'init()'進行初始化。
Servlet只是一個接口(javax.servlet.Servlet)和java中的接口沒有任何構造函數和一個實現類的構造不能在servlet接口中聲明,它沒有任何意義。容器只會使用init()方法來初始化servlet。
+0
和ya我們需要init方法bcz來初始化servlet,我們需要特殊對象servletConfig,我們可以在init方法中訪問這個對象,而不是在構造函數中。 – Pri 2012-11-20 11:43:16
相關問題
- 1. 對象問題。使用構造函數還是不行?
- 2. Spring ResponseEntity:使用構造函數還是靜態構建器?
- 3. 我應該使用構造函數注入還是IoC.Resolve?
- 4. 使用構造函數注入和默認構造函數是不好的?
- 5. 節點 - 工廠還是構造函數,還是兩者都不?
- 6. 不能使用線程構造函數
- 7. Java:使用不同的構造函數
- 8. 使用構造函數聲明(構造函數?)
- 9. 我應該使用新的Type()還是Type()來調用構造函數
- 10. 重構MemberwiseClone使用構造函數
- 11. 構造函數不會繼承,即使使用`使用`
- 12. 構造函數是必需的還是僅用於方便?
- 13. 讓QueryDSL的構造函數使用常量而不是參數
- 14. 使用類屬性而不是const構造函數參數
- 15. 使用ArrayList調用構造函數
- 16. 使用構造函數調用方法
- 17. 混入#不是調用構造函數
- 18. TypeError:用戶不是構造函數
- 19. 構造函數 「是不是一個構造函數」
- 20. 矢量 - push_back使用默認的構造函數不復制構造函數
- 21. 使用構造函數的參數c#
- 22. TypeError:fakeClass不是構造函數
- 23. THREE.FileLoader不是構造函數(...)
- 24. TypeError:d.ListingCreationDate.getUTCFullYear不是構造函數
- 25. 「x」不是構造函數
- 26. gadgets.MiniMessage不是構造函數
- 27. LocalStrategy不是構造函數
- 28. TypeError:L.Control.Draw不是構造函數
- 29. Firebase不是構造函數
- 30. Vue不是構造函數
我想那麼首先調用'init()'然後構造函數?你能否詳細說明_side-effects_?還有一種情況可能需要Servlet構造函數(例如在一個famework的情況下)?最後可以提供一些鏈接(不管是技術上的) - 特別是init()在幕後發生的方式? – 2012-07-22 16:02:29
@Mr_and_Mrs_D:1.不,可以在構造函數之前的對象上調用任何方法,包括'init()'2.閱讀關於模擬和代理 - 在某些情況下,構造函數可以被調用兩次。 3.查看我添加到我的答案的鏈接,servlet *必須*有一個無參數構造函數。 4.猜猜它是容器依賴的。所有你需要知道的是它在構造函數之後和任何'service()'調用之前調用。 – 2012-07-22 16:12:40
1.是的 - 抱歉。這可以是默認的構造函數 - 我不必寫一個 - 對嗎?關於這個主題的另一個鏈接從這裏[這裏](http://stackoverflow.com/questions/1276082/constructor-in-servlet/2659597#2659597) – 2012-07-22 16:29:50