类加载应用程序上下文Spring

时间:2013-01-17 10:29:10

标签: java spring class loading applicationcontext

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

怎么做?

请帮忙。

感谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

<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

希望它有所帮助。

答案 1 :(得分:1)

我想你还没有提到你的bean的范围。如果你没有在应用程序上下文中提到范围,那么默认容器使用singleton scope.It意味着在整个urs系统中使用相同的bean实例,除非你关闭容器。 bean的实例保持不变。如果你想覆盖默认行为,可以在urs applicationcontext中为bean提供范围。你最好在这个链接中看到我曾经问过同一个问题的问题。 Pre-loading and lazy loading in spring with tomcat