启动项目的时候,发现初始化控制层的时候,初始化(使用构造方法打印日志的方式)了两次的情况。
后来检查配置:
<context:component-scan base-package="com.winning.joiner"> </context:component-scan>
发现,配置扫描的时候,没有排除@controller 层的过滤器
修改后,问题解决,如下:
在springmvc的配置文件配置扫描:
<context:component-scan base-package="com.winning.joiner.magiccube"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan>
在spring context的配置扫描:
<context:component-scan base-package="com.winning.joiner.magiccube"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan>
两个文件配合配置,才能解决实例化两次的问题。
简单点说,就是springmvc扫描的包,扫描包含@Controller注解的类。
而spring context 的扫描包,就要包包含@Controller的注解的类排除掉,这样才会在spring整个大工厂中,存在一个实例。