【发布时间】:2013-11-07 08:02:17
【问题描述】:
我正在使用带有 spring-mvc 和 spring-security 的 @Autowired 注释,它可以工作,但是 webapp 启动非常慢,每次大约 1 分钟,因为 spring-mvc 和 spring-security 扫描了两次所有自动装配的类和班级总数约500个。 有什么建议可以加快扫描时间吗?还是静态xml配置更好?
在 web.xml 中
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/rest-servlet.xml
</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
....
在 rest-sevlet.xml 中
<context:component-scan base-package="com.mycomp" />
<mvc:annotation-driven />
<mvc:interceptors>
....
</mvc:interceptors>
<import resource="classes/config/applicationContext-security-base.xml"/>
<import resource="classes/config/applicationContext-security.xml"/>
<import resource="classes/config/spring-aop.xml"/>
<!-- i18n -->
<import resource="classes/config/spring-locale.xml"/>
【问题讨论】:
-
为什么类会被扫描两次?! Spring Security 仅扫描已定义的 bean(即上下文中的
@Components)。组件扫描扫描 bean 的类路径。如果配置错误,您可能会有重复的 bean。其次,为什么启动时间是个问题?无论如何发布一些配置和你的 web.xml。 -
使用分析器查看时间的去向。 Spring 通常启动很快,但您的一些 bean 可能需要一些时间(例如 Hibernate?)
-
扫描两次它由 spring-mvc sevlet (rest-servlet) 和 spring-security 过滤器引起,我认为。他们都需要一个单独的弹簧上下文。
-
就像问题linkthere
标签: xml spring spring-mvc annotations