IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Springboot自定义组件 -> 正文阅读

[Java知识库]Springboot自定义组件

Springboot自定义组件

前言:讲自定义组件前先要明白每个组件是干什么的,在项目运行中起着什么作用。这样我们知道在什么时候应该怎么样去配置组件,所以我们需要先来了解SpringMVC的运行流程

SpringMVC

springMVC的核心在于其流程,它是一种 Servlet 的技术,它提供了核心控制器 DispatcherServlet 和相关的组件,制定了松散的结构;为了让大家对SpringMVC 有一个大致的认识,先给出它接收请求,处理请求,最后响应浏览器的流程图;
请添加图片描述

  1. 发送请求到前端控制器DispatcherServlet
  2. 通过处理器映射找到对应的处理器,生成处理器对象及处理器,拦截器
  3. 要运行处理器就需要一个对应的环境(适配器),通过适配器就会运行对应的处理器(包含了控制器的内容和其他增强的功能)、拦截器
  4. 处理器执行完返回模型和视图给dispatcherServlet
  5. dispatcherServlet将模型传递给视图解析器
  6. 视图解析器解析完把模型渲染到视图中
  7. 最后将视图响应给用户

再尝试用自己的理解快速过一遍:请求到dispatcherServlet,通过handlerMapping映射到对应的handler及Interceptor,再通过HandlerAdapter去执行,返回对应的ModelAndView,用ViewResolver去解析,生成view,响应用户;

大家有时间可以看看SSM框架中纯手工配置前端解析器,视图解析器,上下文监听器,拦截器…

了解一下SpringMVC的几个组件就够了,至于springmvc-servlet.xml的配置就不写出来了,毕竟现在springboot都是自动配置的。

springMVC流程及配置可以参考这篇文章:https://blog.csdn.net/floating_dreaming/article/details/89089214

SpringBoot-拦截器

自定义springmvc组件配置到Springboot中:

  1. 自定义一个拦截器MyInterceptor
    1. 继承HandlerInterceptor 接口
    2. 实现相应方法
    3. 在方法中编写通过拦截器的条件
  2. 自定义webMvcConfig
    1. 继承WebMvcConfigurer接口
    2. 实现addInterceptor方法
    3. 在方法中定义要拦截的路径和不需拦截的路径
//创建拦截器,并实现拦截器方法。
public class LoginInterceptor implements HandlerInterceptor {
  
  	//在请求发送到控制器之前执行操作,返回true,则等于放行。
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      //加入逻辑操作,例如请求指定路径处理之前进行登录验证
        HttpSession session = request.getSession();
        Object username = session.getAttribute("username");
        if (username == null || username.equals("")){
            request.setAttribute("msg", "无权限请先登录");
            request.getRequestDispatcher("/index").forward(request, response);
            return false;
        }
        return true;
    }

  	//用于在将响应发送到客户端之前执行操作。
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }

  	//用于在完成请求和响应后执行操作
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}
@Configuration
public class LoginMVCConfig implements WebMvcConfigurer {

  	//创建拦截器实例bean并加入到容器中
    @Bean
    public LoginInterceptor loginInterceptor() {
        return new LoginInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //拦截器默认会把静态资源也拦截下来,所以我们需要把静态资源的相对路径开放;必然还有我们登录页面
        registry.addInterceptor(loginInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/","/index","/css/**", "/js/**", "/img/**");
    }

  	//页面跳转,当我们请求/index路径时,会自动映射到index视图
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
      	//前提index页面放在视图解析器默认解析的位置,视图解析可在配置文件中配置,当然也可以通过这种注解的		方式配置
        registry.addViewController("/index").setViewName("index");
    }
}

以上是添加拦截器的例子在springboot上自定义了一个组件,其实springboot中的组件都有默认的一个配置,而且是自动配置好的。只是我们通过了解了每个组件的作用之后,我们就可以自己去配置添加这些组件,破坏掉它默认的配置。其实这对于我们了解springboot也好,写需求也好,解决bug也好,都有很大的帮助。

最后,说一下,对于我们在springboot中自定义添加任何组件,都是需要去继承一个WebMvcConfigurer 这个类的,然后将我们的组件通过对应的方法里面的registry参数,配置组件并添加到容器中;
在这里插入图片描述

可重写的方法太多啦,但是大家可以看到很都是springmvc运行流程中相关的组件,所以只要知道了每个组件是做什么的,其实很好去对springboot进行配置添加组件的。其实这也是springboot的自动配置的潜在原理了把,就是把SSM中需要使用xml配置文件配置的组件,拿来进行封装,然后我们需要的时候,只要去重写他的方法就好了。

这里推荐给大家对webConfigconfigurer详解的一篇文章(对常用方法的重写):https://blog.csdn.net/zhangpower1993/article/details/89016503

下一篇文章:excel的导入导出

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:12:16  更:2021-11-22 12:13:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:02:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码