Servlets servlet-是否使用构造函数?

Servlets servlet-是否使用构造函数?,servlets,coding-style,java-ee-6,glassfish-3,servlet-3.0,Servlets,Coding Style,Java Ee 6,Glassfish 3,Servlet 3.0,servlet中的构造函数被认为是一种好的/坏的实践?它与init()方法相比如何?使用servlet-3和vanilla javaEE(由javax.inject包提供的CDI)在servlet中使用构造函数没有错。切换到init()的原因是当您需要获取ServletConfig、ServletContext等时。这些对象可能(尚未)在构造函数中可用 另外,假设有些容器可能会使用servlet做一些奇特的事情,比如动态子类化或代理。最后,构造器中的副作用往往使测试更加困难 为了避免意外行为并确

servlet中的构造函数被认为是一种好的/坏的实践?它与
init()
方法相比如何?使用servlet-3和vanilla javaEE(由javax.inject包提供的CDI)

在servlet中使用构造函数没有错。切换到
init()
的原因是当您需要获取
ServletConfig
ServletContext
等时。这些对象可能(尚未)在构造函数中可用

另外,假设有些容器可能会使用servlet做一些奇特的事情,比如动态子类化或代理。最后,构造器中的副作用往往使测试更加困难

为了避免意外行为并确保servlet 100%可移植,只需坚持使用
init()
。另外,如果您也使用
destroy()
,那么实现
init()
将使代码更加“对称”

另见

在servlet中使用构造函数没有错。切换到
init()
的原因是当您需要获取
ServletConfig
ServletContext
等时。这些对象可能(尚未)在构造函数中可用

另外,假设有些容器可能会使用servlet做一些奇特的事情,比如动态子类化或代理。最后,构造器中的副作用往往使测试更加困难

为了避免意外行为并确保servlet 100%可移植,只需坚持使用
init()
。另外,如果您也使用
destroy()
,那么实现
init()
将使代码更加“对称”

另见

是的,我们可以在servlet中使用构造函数,但bcoz不需要它-

servlet由web容器初始化。servlets不像其他java类那样初始化。构造函数用于初始化显式创建的对象,而servlet使用不同的方法“init()”进行初始化


Servlet只是一个接口(javax.Servlet.Servlet),java中的接口没有任何构造函数,实现类的构造函数不能在Servlet接口中声明,也没有任何意义。容器将只使用init()方法初始化servlet。

是的,我们可以在servlet中使用构造函数,但这不是必需的-

servlet由web容器初始化。servlets不像其他java类那样初始化。构造函数用于初始化显式创建的对象,而servlet使用不同的方法“init()”进行初始化


Servlet只是一个接口(javax.Servlet.Servlet),java中的接口没有任何构造函数,实现类的构造函数不能在Servlet接口中声明,也没有任何意义。容器将只使用init()方法初始化servlet。

我想首先调用
init()
,然后调用构造函数?你能详细说明一下副作用吗?还有可能需要Servlet构造函数吗(例如在famework的上下文中)?最后,您能否提供一些链接(无论多么技术性)-特别是关于init()在幕后发生的方式?@Mr_and_Mrs_D:1。不,在构造函数之前不能对对象调用任何方法,包括
init()
2。了解模拟和代理-在某些情况下,构造函数可以调用两次。3.请参阅我在回答中添加的链接,servlet必须具有无参数构造函数。4.我猜这取决于容器。您需要知道的是,它是在构造函数之后和任何
service()
call.1之前调用的。是-抱歉。3.这可以是默认构造函数-我不必编写一个-对吗?关于这个主题的另一个链接来自SO@Mr_和Mrs_D:Ad 3。必须有一个无参数构造函数-要么是您编写的构造函数,要么是编译器为您创建的默认构造函数。我想首先调用
init()
,然后调用构造函数?你能详细说明一下副作用吗?还有可能需要Servlet构造函数吗(例如在famework的上下文中)?最后,您能否提供一些链接(无论多么技术性)-特别是关于init()在幕后发生的方式?@Mr_and_Mrs_D:1。不,在构造函数之前不能对对象调用任何方法,包括
init()
2。了解模拟和代理-在某些情况下,构造函数可以调用两次。3.请参阅我在回答中添加的链接,servlet必须具有无参数构造函数。4.我猜这取决于容器。您需要知道的是,它是在构造函数之后和任何
service()
call.1之前调用的。是-抱歉。3.这可以是默认构造函数-我不必编写一个-对吗?关于这个主题的另一个链接来自SO@Mr_和Mrs_D:Ad 3。必须有一个无参数构造函数-无论是您编写的构造函数还是编译器为您创建的默认构造函数。并且,我们需要init方法bcz来初始化servlet,我们需要特殊的对象servletConfig,我们只能在init方法中访问此对象,而不能在构造函数中访问。并且,我们需要init方法bcz来初始化我们需要的servlet特殊对象servletConfig,我们只能在init方法中访问该对象,而不能在构造函数中访问。