为什么我们使用的init()而构造

问题描述 投票:2回答:4

为什么我们需要init()而不是constructor

ServletApplet的参考答案。 如何init()AppletServlet有什么不同?

java servlets applet
4个回答
10
投票

init()方法创建并加载这个servlet。但servlet实例是通过构造函数(由Servlet容器实现)第一次创建。我们不能写一个servlet类的构造函数用的servlet(它会抛出异常)参数。因此,他们提供了接受一个ServletConfig对象作为参数init()方法。 ServletConfig对象提供一个servlet与绕其初始化(INIT)参数的信息。 Servlet类不能声明与ServletConfig对象构造函数作为参数,不能访问ServletConfig对象。

http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets6.html:在更多信息


2
投票

你既需要,但他们执行不同的活动,您的构造函数执行的目的是通过新的呼叫建立时间,但对于某些类型的对象,你不控制自己的创作,还是宁愿不仅执行一些代码在创建后的对象,但完全intialized,那么你就需要一个特殊的方法,有人会打电话以表示该对象已准备就绪。

这是专门为那些没有被你管理的对象的情况,但是服务器,框架或谁管理这些对象。

你应该可以看到这个方法是提供给您的代码的顶部,这个对象将在构造函数中执行商品


2
投票

这是一个设计选择。 Servlet规范说,你必须提供一个无参数的构造函数,你可以重写init()方法执行初始化任务。他们可以选择不这样做,需要的servlet有一个参数的构造函数(ServletConfig)任选抛出ServletException。从技术上讲,有与无的问题,因为反射API允许你调用一个类中声明的任何构造函数。

然而具有init()方法允许servlet容器预实例化对象和延迟它们的初始化。它有助于生命周期的不同的不同阶段。

就个人而言,我不认为这是一个强大的设计选择。这本来是方便多了,让Web应用程序提供的servlet容器预实例的servlet,而不是让容器调用各种servlet的构造函数。


0
投票

init()方法被调用一次,并且因此只有一个控制实例将被创建。

© www.soinside.com 2019 - 2024. All rights reserved.