Skip to main content
 首页 » 编程设计

annotations之设置metadata-complete ="true"(解决了Tomcat 7启动缓慢的问题)后如何处理注释

2024年08月16日40zengkefu

似乎可以通过在 web.xml 中将“metadata-complete”设置为“true”来解决 Tomcat 7 启动缓慢的问题,如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app metadata-complete="true" id="WebApp_ID" version="3.0"... 

问题是 Tomcat 在启动时扫描注释,这显着减慢了速度。我的时间从 25 秒减少到 5 秒。 (更多信息请参见:Tomcat and Servlet 3.0 Web Configuration)

但是,我的代码中有一些注释,例如:

@ManagedBean 
@RequestScoped 
@Override 
... 

我很困惑 - 设置metadata-complete=“true”后我的代码还能工作吗?我是否必须删除注释并将所有内容移至 web.xml 中?

请您参考如下方法:

启动缓慢的原因是 /WEB-INF/lib 中每个 JAR 文件中的每个类文件也会扫描 Servlet 3.0 特定注释。显然,/WEB-INF/lib 中有很多(大)JAR 文件。

metadata-complete="true" 表示不需要扫描 /WEB-INF/lib 中的 JAR 文件中的 Servlet 3.0 特定注释,但仍会扫描 webapp 自己的类。

请注意,您列出了两个 JSF 注释和一个 Java SE 注释,而不是任何 Servlet 3.0 注释。 javax.servlet.annotation 中列出了 Servlet 3.0 注释。包裹。仅当 JAR 文件包含 JSF 2.0 兼容的 /META-INF/faces-config.xml 文件时,JSF 才会扫描注释。它不会立即扫描每个 JAR 文件中的每个类。 Java SE @Override注解不是运行时注解,而只是编译时辅助。

另请参阅: