簡體   English   中英

servlet中的參數化構造函數

[英]Parameterized constructor in servlet

我可以在servlet中聲明參數化構造函數,它只是構造函數嗎?

如果沒有那么為什么?

沒有。

Servlet實例由容器通過反射創建,他們希望找到一個public,no-arg構造函數(默認構造函數)。

要配置servlet,請使用web.xml文件中指定的servlet參數。 這些傳遞給servlet的init()方法。


雖然這將有可能為一個servlet容器選擇一個非默認的構造函數,並強制對字符串進行簡單的類型和反思調用構造函數,這不是什么Servlet規范要求。

部分原因可能是歷史性的; 在依賴注入系統使這種替代方案得到廣泛實踐之前,servlet首次被指定。 但是,這樣的構造函數相當有限; 傳遞可以從web.xml中指定的簡單字符串創建的參數是切實可行的,但更有用的對象 - 例如DataSource - 會很尷尬。

最好在servlet中包含最終成員變量。

JSR以前稱為“WebBeans”(我認為是JSR 299),它將為Servlet中的依賴注入支持提供一些標准。 這可能解決當前方法中的一些缺點。

沒有! 我們不能在servlet中提供參數化構造函數.servlet容器為sevrlet創建對象。容器將基於Class.forName(String classname)創建對象。 我們可以使用Class.forName()創建一個類的對象,如果該類包含默認構造函數only。因為容器在創建對象時使用Class.forName()代碼,我們不會將參數化構造函數寫為部分輸出servlet。 即使我們想編寫參數化構造函數,我們也可以從service()方法調用構造函數!

由於servlet由容器實例化,因此它們需要一個無參數的構造函數。

此外,容器可以重用servlet,並且不會在重用時調用構造函數。

您需要通過<servlet-param>初始化變量或使用類似Spring的框架,它允許您將Servlet代理到與其他任何bean一樣的其他類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM