Spring MVC中的调用链路
Posted hardyzhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring MVC中的调用链路相关的知识,希望对你有一定的参考价值。
在Spring MVC中,请求处理的过程通常分为以下几个步骤:
-
通过HandlerMapping根据请求的URL匹配到相应的Handler(处理器)。
-
通过HandlerAdapter调用对应的Handler处理请求。
-
调用Handler返回一个ModelAndView对象。
-
通过ViewResolver将ModelAndView中的视图逻辑名解析成对应的View(视图)。
-
最终渲染View并返回响应给客户端。
而HandlerMapping和HandlerAdapter则是用于实现上述第1步和第2步的两个最重要的组件。
HandlerMapping的作用是将请求映射到具体的Handler(处理器),从而确定如何处理该请求。HandlerMapping主要有两个默认实现类:RequestMappingHandlerMapping和SimpleUrlHandlerMapping。前者是基于@RequestMapping注解的映射,后者是基于请求URL和Handler的映射。此外,我们也可以自己实现HandlerMapping接口,来实现自定义的映射方式。
HandlerAdapter的作用是将请求交给对应的Handler进行处理,并将Handler处理结果封装成ModelAndView对象返回。HandlerAdapter是Spring MVC框架中的核心组件之一,其主要功能就是将不同类型的Handler适配成可以处理请求的标准接口,即Controller接口,大大增强了框架的扩展性。Spring MVC中默认提供了很多种HandlerAdapter实现类,如SimpleControllerHandlerAdapter、AnnotationMethodHandlerAdapter等。
总的来说,HandlerMapping和HandlerAdapter的作用是解决请求与处理器之间的映射和适配问题,让不同 kind of Handler(处理器)能够处理不同种类的请求,并最终返回视图给用户。
欢迎大家阅读,有问题和不足的地方欢迎大家指出。作者:永和九年,转载请注明原文链接:https://www.cnblogs.com/hardyzhou/p/17471297.html
独立的main方法调用Spring MVC框架中的service
Ctrl层调用service层正常,但是我这边有个需求,需要通过main方法直接调用service层,实现数据库查询。连接池使用的是muBatis,applicationContext.xml中配置了
<bean id="sqlSessionFactory"><property name="mapperLocations">
及dao层中需要注入的Xxx.xml(内为SQL语句)
main方法中我初始化
XxxSercice service = new XxxSerciceImpl();
但是service中的dao为空,请问如何在main中也实现dao的注入?
这个service不能这么new出来,需要在main方法中得到spring容器
public class SpringTestpublic static void main(String[] args)
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
IPersonService ips = (IPersonService) ac.getBean("personService");
ips.sayHelloToSpring();
,再用容器的getBean(“”)来得到service,这样,是spring容器就把之间的关系都注入好了。这是我写过的一个用main方法做测试的例子。真正的测试是不用main方法的,是用专门的测试工具来模拟web程序的。
追问你的bean.xml里面是这样吗?
我的applicationContext-core.xml中是遍历包
这种情况也怎么处理?
我使用的是spring的注解@service(‘personService’),没有在bean.xml中配置标签,感觉xml配置好麻烦,要是有一万个bean那xml文件都得写多大。
参考技术A 你这是spring管理bean类,如果直接main方法调用的话,也需要把dao new出来,然后调用service的set方法手动注入进去追问我的dao接口是IXxxDao.class,实例化是通过spring托管XxxDao.xml进行注入的。
main中如何new dao?
2楼的那个简单些,实例化spring容器,通过getBean方法获取service,这样里面的属性都注入进去了 一段时间没摸spring 了,有点忘了
以上是关于Spring MVC中的调用链路的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud(16)——链路追踪工具Sleuth