繁体   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