Spring父子容器

首先,大家思考一个问题:
在开发中,我们经常在Controller中注入Service方法,完成业务处理;有没有试过在Service中注入Controller方法?这样注入会不会有问题?

按照我以前的理解就是:Spring上下文管理的是由@Service,@Respository和@Component这三个注解标识的bean;SpringMVC上下文管理的就是由@Controller标识的bean,然后继承Spring上下文

基于以上理解,我就认为:Spring和SpringMVC在解析@Controller,@Service,@Respository这三个注解的时候,肯定对应不同的注解有不同的处理逻辑,要不然怎么区分将@Controller标识的bean加到SpringMVC容器而不是Spring容器的呢?

带着这个问题,我就去看了Spring进行包扫描后,解析注解的源码:发现处理逻辑都是一样的,没有针对不同的注解进行不同的处理。 Spring的处理逻辑是,只要bean上有@Component注解,就会将bean加入到容器管理中。(@Controller,@Service和@Respository这三个注解都被@Component标识了的,这三个注解只是语义上的不同,对于spring来说都一样),大家对spring解析注解源码有兴趣的,可以参考这个博客

既然处理逻辑都一样,那是怎么将由不同注解标识的bean放到不同的容器中的呢?
答案就是:在配置包扫描路径的时候,Spring排除掉controller所在的包,SpringMVC只配置Controller所在的包。
也即是这么配置:
Spring: applicationContext.xml

<context:component-scan base-package="com.test">   <!-- base-package 指定扫描的包路径 -->
       <context:exclude-filter ty
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值