类加载 应用上下文 Spring

4

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

如何做到这一点?

请帮忙。

谢谢。


有人可以帮忙吗?谢谢。 - nicholas
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); GenericDAOImpl dao = (GenericDAOImpl) ctx.getBean("genericDaoImpl"); ClassLoader clsLoader = Thread.currentThread().getContextClassLoader(); clsLoader.loadClass(arg0); 这是最好的方法吗? - nicholas
请提供一些答案。 - nicholas
你的评论可能会增加混淆。你想要预加载bean吗?使用你的applicationContext定义加载所有的bean——ApplicationContext实现的默认行为是在启动时急切地预先实例化所有单例bean。 - Manish Singh
2个回答

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
我认为您没有提及bean的范围。如果您在应用程序上下文中没有提及范围,则默认容器使用单例范围。这意味着除非关闭容器,否则整个系统都会使用相同的bean实例。bean实例始终保持不变。如果您想覆盖默认行为,则可以为应用程序上下文中的bean提供范围。您最好查看此链接,我曾经询问过同样的问题。 Spring中的预加载和延迟加载与Tomcat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接