我可以在Tomcat上加载servlet类之前运行代码吗?

时间:2012-01-06 18:10:48

标签: java tomcat servlets classloader bytecode

我正在对我的一些业务对象进行一些运行时字节码操作,并且以正确的顺序加载它们非常重要。目前我只是在我的Startup servlet中以正确的顺序调用它们上的Class.getSimpleName()。这一直很好,但是如果有更好的方法,我会全力以赴。

但是,现在我需要一个servlet过滤器中的方法来返回一个具体的业务对象类型。这导致类加载器首先加载该特定业务对象类(乱序)并且事情中断。

我想要的是能够在加载任何servlet或过滤器 之前运行我的getSimpleName()hack 。是否有一些地方我可以把代码运行在类加载器甚至加载我的过滤器之前运行?

2 个答案:

答案 0 :(得分:3)

是的,你可以。

请看ServletContextListener

答案 1 :(得分:1)

tomcat类加载器以这种方式工作。

enter image description here

如果要在任何web-app类加载之前加载任何类,那么可以将这些类放在jar文件中并将其部署到tomcat公共库,这些类将在加载Web应用程序类之前加载由类加载器。

您可以查看apache tomcat类加载器如何工作的文档here