Java 有没有办法将一些操作引导到我的所有servlet?

Java 有没有办法将一些操作引导到我的所有servlet?,java,servlets,init,bootstrapping,Java,Servlets,Init,Bootstrapping,我有一堆小服务员。我希望所有人都以几乎完全相同的方式实例化一个记录器。 是否有一个合适的(如主文件)可以引导我捕获这样的代码? 目前我所做的是创建Servlet类的一个子类,该子类在init函数中执行此操作,所有其他Servlet都继承自它。我不知道您对记录器的尝试是否是一个好主意(我认为您将失去一些记录器功能),但是,如果希望servlet中某个对象的唯一实例,则应以静态方式声明并初始化它: static final SomethingClear GLOBAL; static{ //

我有一堆小服务员。我希望所有人都以几乎完全相同的方式实例化一个记录器。
是否有一个合适的(如主文件)可以引导我捕获这样的代码?

目前我所做的是创建Servlet类的一个子类,该子类在init函数中执行此操作,所有其他Servlet都继承自它。

我不知道您对记录器的尝试是否是一个好主意(我认为您将失去一些记录器功能),但是,如果希望servlet中某个对象的唯一实例,则应以静态方式声明并初始化它:

static final SomethingClear GLOBAL;
static{
    // do tons of things to init 
    GLOBAL = ClassWithStaticFunc.gimmeGlobalLoaded();
}
A为什么这样更好?因为还有另一个有趣的,或者很好的,可能是恼人的:(-在servlet中加载静态变量的方式(从唯一性的意义上来说,它总是内存中的一个实例):

servlet没有“main”之类的东西。它们是存在于servlet容器中的唯一实例,由servlet及其方法(doGet、doPost、doPut、doDelete)实例化由servlet容器按需执行,为其提供请求和响应对象。因此,在内存中,每个servlet始终只有一个实例,因此doGet、doPut、doDelete和doPost之外的任何变量在内存中都是唯一的。这是在java时代开始时为节省内存而采用的方法

这是一种合并会话的有趣方式…:(

如果您将某个内容分配给servlet中该方法之外的任何内容,它将被分配给应用程序的所有会话,这并不明显,也不容易找到

所以最好将它们标记为静态和最终的,因为它们总是被创建的(您无法访问对象构造),并且只有一个实例

我曾经做过一个独特的servlet,它使用反射调用我的自定义“servlet”(每个请求一个对象,在web.xml中将我的“servlet”的名称命名为initParam,并将servlet名称始终设置为与我的实例化器相同的servlet)解决会话合并问题非常有效。

提供了一个方便的
@Slf4j