Spring学习过程思考的两个问题

来源:互联网 发布:玩客云抢购软件3.0 编辑:程序博客网 时间:2024/06/12 00:57

   最近在学习Spring的过程中,思考了很多问题。如下列举两个,有兴趣的同胞们一起想想:


   问题区:

       1·在标识表现层组件(controller文件)的@Controller注解上,修改为其它spring注解,如@Component,这样可行吗?

      同样,@Service的注解上,更改为其它注解,这样可行吗?

   2·Mybatis和Spring结合是如何实现把DAO接口直接注入到Service层中的?


 ——————————————————————————————————

    答案区:

   1·不可行;可行

     解析:

A网上解释:SpringMVC的定制功能:

在注入Spring的容器后,再取出来做自己定制的功能,Spring-MVC就是使用这样的方法。AbstractDetectingUrlHandlerMapping 中的 detectHandlers方法,这个方法取出了所有的bean,然后循环查找带有Controllerbean,并提取其中的RequestMapping信息

 

B自己理解:这就是SpringMVC的独特之处,因为它是一个前端控制器,它要做的就是根据请求的url来转发到相应的controller上的requestMapping里,如果换成spring其它的注解,detectHandlers方法就不会扫描到这个类,更不用谈requestMapping的注解了,so404错误就出来了。

而在业务层上的@service注解换成spring可识别的其它注解也可行的原因在于:这个注解完成的工作是:被spring容器扫描后管理,能够被controller注入即可。


   2·

网上答案:

配置文件中的MapperScannerConfigurer

自动扫描制定位置的Mapper接口,然后自动生成代理类,实现接口内容。这样在调用接口的时候,实际上是通过代理类去调用mybatis的xml中的sql语句

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage" value="org.mybatis.spring.sample.mapper"/></bean>

这段配置会扫描org.mybatis.spring.sample.mapper下的所有接口,然后创建各自接口的动态代理类。所以,只要在spring的配置文件中配置以上内容后,在service层直接注入mapper即可。

现在的关键便是Mybatis的MapperScannerConfigurer类是关键点了,在博客《Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring》中给出很好的解释,但自己的理解还没到位,有兴趣的伙伴们可以一起交流。