4

我有一个 Spring Web 项目,我需要在初始化应用程序上下文后加载一些类,因为这些类最终将在未来使用。因此,我尝试在使用前预加载它们以提高性能。

怎么做 ?

请帮忙。

谢谢。

4

2 回答 2

2

要将类加载到 JVM 中,只需调用Class.forName('com.foo.bar.MyClassToPreLoad')方法即可。您可以在自己的实现中执行javax.servlet.ServletContextListener它,然后在 web.xml 中注册它

<listener>
    <listener-class>com.foo.bar.MyClassPreloadingContextListener</listener-class>
</listener>

或者,您可以在任何 Spring bean 实现org.springframework.beans.factory.InitializingBean接口中执行此操作。或者,如果您不想实现接口,您可以在任何不带参数的 bean 方法中执行此操作,并将其注册为此 bean的init 方法:

<bean class="com.foo.bar.MyClassPreloadingBean" init-method="preloadClasses"/>

有关详细信息,请参阅http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-lifecycle-initializingbean

或者http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-postconstruct-and-predestroy-annotations如果您更喜欢基于注释的配置。

希望能帮助到你。

于 2013-02-11T08:53:31.153 回答
1

我想你没有提到你的 bean 的范围。如果你没有在应用程序上下文中提到范围,那么默认容器使用单例范围。这意味着除非你关闭容器,否则整个 urs 系统都使用相同的 bean 实例。 bean 保持不变。如果你想覆盖默认行为,使用可以为 urs applicationcontext 中的 beans 提供范围。你最好在这个链接中看到我曾经问过关于同样问题的问题。 使用tomcat在spring中进行预加载和延迟加载

于 2013-02-11T12:12:46.447 回答