美文网首页
SpringMVC 底层简单理解

SpringMVC 底层简单理解

作者: Kamiya_ | 来源:发表于2020-02-26 23:42 被阅读0次

    SpringMVC万年不变的的核心:
    IOC容器
    AOP切面编程

    DispatcherServlet 核心处理类 该类中包含springMVC初始化方法,先跳过这里不考虑我们先研究一下IOC容器。

    IOC容器底层实际上是一个map,用来装载实例化对象。

    我们先看一段简单的代码

       @Controller
       @ReuqestMapper("/user")
       public class UserController {
           
           @AutoWired
           private UserService userService;
    
           @ReuqestMapper("/login")
           public void login(){
               return null;
           }
       }
    

    被@Controller、@Service、@Component注解标记的类会在springMVC框架初始化时(可以理解为项目服务启动时)通过反射机制创建该类对象并存入iosmap中,
    当被@AutoWired注解标记后会springMVC会将实例化的对象get出来。
    @ReuqestMapper注解中的参数也会存入map中,我们暂且将它定义为urlMap,springMVC会通过类上的地址和方法上的地址做拼接后存入urlMap中与method建立映射关系。

    1、我们可以创建一个iocmap
    Map iocMap = new HashMap(); \\ 我们可以把它理解为 springMvc的Ioc容器
    2、当UserService类被@Service注解标记后
    UserService userService = new UserService(); \\当然对象不是new出来的,而是通过反射 newInstanse()出来的 这里只是方便理解
    iocMap.put("userService",userService); \\这里就将实例化对象存入到ioc容器中
    3、当我们需要使用UserService这个对象时通过@AutoWired注解
    UserService userService = iocMap.get("userService"); \\从容器中取出并注入
    4、为login接口建立url映射
    urlMap.put("/user/login",login方法); //类路径+方法路径做为key存入urlMap中 value为映射的方法
    5、需要请求login接口时
    localhost:8080/project/user/login
    Method method = urlMap.get("/user/login"); //通过请求地址获取要调用的方法

    让我们再来顺一遍springMVC启动时都做了什么
    1、创建容器:创建IocMap。
    2、扫描 ScanbasePackage配置的包下 @Controller、@Service 注解的类 (配置文件中ScanbasePackage配置了要扫描的包,只有在该包下的类才会被spring扫描)
    3、实例化:将扫描到的类通过反射实例化并存入到iocMap容器中。
    4、依赖注入:将存在依赖的bean进行注入。
    5、http请求路径与method建立映射关系。

    回到最开始我们提到的核心类,以上步骤就是在服务启动时通过 DispatcherServlet 核心类 init 方法中初始化

    为什么会执行DispatcherServlet中的init方法

    再回想下我们使用springMVC框架时 web.xml中的配置

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    

    相关文章

      网友评论

          本文标题:SpringMVC 底层简单理解

          本文链接:https://www.haomeiwen.com/subject/dkmgchtx.html