spring与springmvc整合


文章目录


spring与springmvc整合

在项目中使用springmvc的时候,由于spring和springmvc是同源的,有时候大家会把所有的配置都扔到springmvc的配置文件中,而不去区分spring和springmvc的配置,而我习惯于把两个配置拆分开来,spring来配置数据源、事务以及和其他框架的整合,springmvc来配置web相关的一些配置。

在这里给大家说明一下两者配置整合时可能会遇到的一些问题

之前在 web应用使用spring 一节中说过如何在web应用中加载spring容器,使用的是是监听器,这里就不赘述了,可以去搜一下之前的文章

重复创建bean

当springmvc的配置文件和spring的配置文件分离的时候,由于现在使用注解的比较多,大多都是用组件扫描,

如果两个配置文件都使用<context:component-scan base-package="com.zhanghe.study.springmvc"/>来进行组件扫描的话,会导致两个配置文件都扫一遍这些组件,这些bean都会创建两次

这时候就用到了<context:exclude-filter>和<context:include-filter>来进行设置过滤了

springmvc只需要管控制器Controller就可以了,所以在springmvc的配置文件中配置

xml 复制代码
<context:component-scan base-package="com.zhanghe.study.springmvc" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

而spring的配置文件中只需要相应的排除掉springmvc扫描的

xml 复制代码
<context:component-scan base-package="com.zhanghe.study.springmvc">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

容器关系

springmvc容器是spring容器的子容器,springmvc容器可以访问spring容器中的bean,反之则不行

获取spring容器上下文

在项目启动的时候,监听器中会在web应用环境初始化的时候将spring的上下文内容存在应用上下文中

java 复制代码
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

所以在取出来时只需要获取到应用上下文

java 复制代码
req.getServletContext()

然后取出来即可

java 复制代码
context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)

参考文献

相关推荐
xyy20257 小时前
Spring事务的传播方式
java·数据库·spring
不能再留遗憾了12 小时前
【SpringCloud】Sentinel
spring·spring cloud·sentinel
whltaoin13 小时前
AI 超级智能体全栈项目阶段五:RAG 四大流程详解、最佳实践与调优(基于 Spring AI 实现)
java·人工智能·spring·rag·springai
心勤则明13 小时前
Spring AI 文档ETL实战:集成text-embedding-v4 与 Milvus
人工智能·spring·etl
艾菜籽14 小时前
Spring Web MVC入门补充1
java·后端·spring·mvc
艾菜籽16 小时前
Spring MVC入门补充2
java·spring·mvc
为java加瓦20 小时前
Spring 方法注入机制深度解析:Lookup与Replace Method原理与应用
java·数据库·spring
无名客020 小时前
SpringCloud中的网关(Gateway)的作用是什么?
spring·spring cloud·gateway
hrrrrb1 天前
【Spring Security】Spring Security 概念
java·数据库·spring
小信丶1 天前
Spring 中解决 “Could not autowire. There is more than one bean of type“ 错误
java·spring