类加载应用程序上下文 Spring
Posted
技术标签:
【中文标题】类加载应用程序上下文 Spring【英文标题】:Class Loading Application Context Spring 【发布时间】:2013-01-17 10:29:09 【问题描述】:我有一个 Spring Web 项目,我需要在初始化应用程序上下文后加载一些类,因为这些类最终将在未来使用。因此,我尝试在使用前预加载它们以提高性能。
怎么做?
请帮忙。
谢谢。
【问题讨论】:
请大家帮忙。谢谢。 ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); GenericDAOImpl dao = (GenericDAOImpl) ctx.getBean("genericDaoImpl");类加载器 clsLoader = Thread.currentThread().getContextClassLoader(); clsLoader.loadClass(arg0);是这个还是有更好的方法? 请提供一些答案。 您的评论可能增加了混乱。您要预加载 bean 吗?使用 applicationContext 定义加载所有 bean - ApplicationContext 实现的默认行为是在启动时急切地预实例化所有单例 bean。 【参考方案1】:要将类加载到 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,如果您更喜欢基于注释的配置。
希望对你有帮助。
【讨论】:
【参考方案2】:我想你没有提到你的 bean 的范围。如果你没有在应用程序上下文中提到范围,那么默认容器使用单例范围。这意味着在整个 urs 系统中使用相同的 bean 实例,除非你关闭容器。 bean 的实例始终保持不变。如果您想覆盖默认行为,请使用可以在 urs applicationcontext 中为 bean 提供范围。您最好在此链接中看到我曾经问过有关相同问题的问题。 Pre-loading and lazy loading in spring with tomcat
【讨论】:
以上是关于类加载应用程序上下文 Spring的主要内容,如果未能解决你的问题,请参考以下文章