Spring 与 SpringMVC 容器父子关系引出的相应问题

1)关系说明

spring 与 springmvc 父子关系:spring (父容器),springmvc (子容器)

springmvc(子)--- 可调用 --> spring(父) 中的 bean,属性值等
但 spring(父)-- 不可调用 --> springmvc(子) 中的 bean,属性值等

2)配置原则

spring-context.xml
<!-- 启动组件扫描,排除@Controller的组件,因为控制器组件由SpringMVC配置文件扫描 -->
<context:component-scan base-package="com.***.***">
   <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

springmvc.xml
<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器,要有use-default-filters="false" -->
<context:component-scan base-package="com.***.***.controller" >
   <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

success:
url --> servlet --> springmvc(访问 controller,所以 controller 必须放到springmvc容器)
springmvc --> spring(controller 调用 service,dao)

error:
把 controller 放到 spring 容器,不放到 springmvc 出现的问题:
url --> servlet --> springmvc(spring 会将扫描的对象都会存放到 spring 的容器,而不会放到 springmvc 子容器中,当访问项目的时候,springmvc 通过处理器映射器找不到和其对应的 Controller,报 404 错误! )

spring 容器不扫描,全部放到 springmvc 中扫描出现的问题: 
在里面可以同时扫描 controller层、service层、dao层 的注解,但是,子容器controller 进行扫描装配时装配了 @Service注解 的实例,而该实例理应由父容器进行初始化以保证事务的增强处理(因为事务管理器是配置在 spring 容器中的),所以此时得到的将是原样的 Service(没有经过事务加强处理,没有事务处理能力,无法访问到事务对象,导致事务失效)

@Value("${name}") 取不到 properties 文件中定义的变量值
<!-- 配置文件引入 -->
<context:property-placeholder location="classpath:application.properties" 
                       ignore-resource-not-found="true" ignore-unresolvable="true" />
service,dao 中不能 @Value 配置在 springmvc.xml 的properties (父容器 -- 不能访问 --> 子容器 的东西)

posted on   EvanLong  阅读(122)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示