Guns基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springmvc + shiro + 分页插件PageHelper + 通用Mapper + beetl!Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架.

说明

如果您有幸能看到,请认阅读以下内容;

  • 1、本项目临摹自abel533的Guns,他的项目 fork 自 stylefeng 的 Guns!开源的世界真好,可以学到很多知识。
  • 2、版权归原作者所有,自己只是学习使用。跟着大佬的思路,希望自己也能变成大佬。gogogo》。。
  • 3、目前只是一个后台模块,希望自己技能增强到一定时,可以把stylefeng 的 [Guns]融合进来。
  • 4、很多总结的文档都来自abel533的GiHub的README.md.为了方便自己复习就拿来主义了。
  • 5、note里面是自己的学习过程,菜鸟写的,不是大佬写的。内容都是大佬的。

目录

  • 1、SpringBoot第一站,分析了启动类。还有各种自动配置的源码点这里
  • 2、

修改说明

本项目对 Guns 的改动为:

  • 1、将 mybatis-plus 改成了通用 Mapper.
  • 2、增加分页插件 PageHelper.
  • 3、去掉com.stylefeng.guns.modular.system.dao包中的所有DAO,将方法放到对应的Mapper接口中.
  • 4、将 Mapper.xml 移动到 resources 中

关于两者的对比,可以通过 commit 信息查看。

功能简介

  • 1、用户管理
  • 2、角色管理
  • 3、部门管理
  • 4、菜单管理
  • 5、字典管理
  • 6、业务日志
  • 7、登录日志
  • 8、监控管理
  • 9、通知管理
  • 10、代码生成

1、首先我们来看包结构,老样子,我们先从core包开始,然后common,在config。等等,还是先从启动类开始吧。

项目包结构说明

├─main
│  │
│  ├─java
│  │   │
│  │   ├─com.guo.guns----------------项目主代码(原来的包:com.stylefeng.guns)
│  │   │          │
│  │   │          ├─common----------------项目公用的部分(业务中经常调用的类,例如常量,异常,实体,注解,分页类,节点类)
│  │   │          │
│  │   │          ├─config----------------项目配置代码(例如mybtais-plus配置,ehcache配置等)
│  │   │          │
│  │   │          ├─core----------------项目运行的核心依靠(例如aop日志记录,拦截器,监听器,guns模板引擎,shiro权限检查等)
│  │   │          │
│  │   │          ├─modular----------------项目业务代码
│  │   │          │
│  │   │          ├─GunsApplication类----------------以main方法启动springboot的类
│  │   │          │
│  │   │          └─GunsServletInitializer类----------------用servlet容器启动springboot的核心类
│  │   │
│  │   └─generator----------------mybatis-plus Entity生成器
│  │
│  ├─resources----------------项目资源文件
│  │     │
│  │     ├─gunsTemplate----------------guns代码生成模板
│  │     │
│  │     ├─application.yml----------------springboot项目配置
│  │     │
│  │     └─ehcache.xml----------------ehcache缓存配置
│  │
│  └─webapp----------------web页面和静态资源存放的目录
│

注:SpringBoot项目默认不支持将静态资源和模板(web页面)放到webapp目录,但是个人感觉resources目录只放项目的配置更加简洁,所以就将web页面继续放到webapp目录了.

1、先来看启动类:

/*** SpringBoot方式启动类*/
@SpringBootApplication
public class GunsApplication extends WebMvcConfigurerAdapter {protected final static Logger logger = LoggerFactory.getLogger(GunsApplication.class);public static void main(String[] args) {SpringApplication.run(GunsApplication.class,args);logger.info("GunsApplication is success!");}
}

需要注意两个点:@SpringBootApplication注解和WebMvcConfigurerAdapter

(1)、1.2版本应该是@Configuretion注解,这个注解表明这个类会处理Spring的常规bean。来自《精通Spring MVC》

(2)、@ComponentScana 它会告诉Spring去哪里查找SPring组件(服务,控制器),大白话就是bean那。一般我们在控制层的类上会加上@Controller注解,不知道大家有木有配置过XML,难受啊。

(3)、@EnableAutoConfiguration : 看名字,AutoConfiguration啊,这就是Spring魔力所在,省去很多XXML了,在这里是基于JavaConfig配置的。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {Class<?>[] scanBasePackageClasses() default {};
}
-------------------------------------------------------
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}

2、接下来,我们再看下为毛要继承WebMvcConfigrerApapter类。

看见Config没,这个也是配置类,它声明了视图解析器、地域解析器、以及静态资源的位置,(想起来没,就是前置,后置)

先看一段源码 ————源码是个好东西

----------------------InternalResourceViewResolver熟悉吗?-----------------------
@Bean
@ConditionalOnMissingBean
public InternalResourceViewResolver defaultViewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix(this.mvcProperties.getView().getPrefix());resolver.setSuffix(this.mvcProperties.getView().getSuffix());return resolver;
}
---------------------------也是视图解析器,只是返回的是bean-------------------------
@Bean
@ConditionalOnBean({View.class})
@ConditionalOnMissingBean
public BeanNameViewResolver beanNameViewResolver() {BeanNameViewResolver resolver = new BeanNameViewResolver();resolver.setOrder(2147483637);return resolver;
}
-------------------------------地域解析器--------------------------------------------
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.mvc",name = {"locale"}
)
public LocaleResolver localeResolver() {if(this.mvcProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.WebMvcProperties.LocaleResolver.FIXED) {return new FixedLocaleResolver(this.mvcProperties.getLocale());} else {AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();localeResolver.setDefaultLocale(this.mvcProperties.getLocale());return localeResolver;}
}

说了这么多,我们先来看看SpringMVC启动流程,知其所以然的同时也要知其然。

一般来说,初始化 步骤如下:

  • 1、初始化SpringMVC的DispatcherServlet
  • 2、配置转码过滤器(UTF-8,乱码锅就在设置,还有一个就是在发送信息前,setCharacterEncoding()。),保证能正确转码,为啥啊,因为浏览器发送的是ISO-8859?。
  • 3、配置视图解析器,就上面说的那个,返回视图的时候方便定位。
  • 4、配置静态资源的位置,
  • 5、还有就是配置multipart解析器,主要是为了能上传文件,part单词什么意思?多个-部分
  • 6、还需要写错误页面,统一异常处理。

然而,然而有了SpringBoot,统统可以省略,激动吗?兴奋吗? 我是蛮激动的,尤其第一次运行SpringBoot项目。

上面已经帮我们位置了视图解析器,接下来我们看下DispatcherServlet和multipart

@AutoConfigureOrder(-2147483648)
@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({DispatcherServlet.class})     //只有对应的类在classpath中有存在时才会注入
@AutoConfigureAfter({EmbeddedServletContainerAutoConfiguration.class})
public class DispatcherServletAutoConfiguration {public static final String DEFAULT_DISPATCHER_SERVLET_BEAN_NAME = "dispatcherServlet";    //熟悉吗?DeFAULT,默认的那。public static final String DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME = "dispatcherServletRegistration";public DispatcherServletAutoConfiguration() {}
-------------------------------MultipartResolver-------------------------------@Bean@ConditionalOnBean({MultipartResolver.class})@ConditionalOnMissingBean(name = {"multipartResolver"})public MultipartResolver multipartResolver(MultipartResolver resolver) {return resolver;}
}

还有还有,错误配置、转码配置、tomcat配置Jetty等等。具体的在这个配置类中EmbeddedServletContainerAutoConfiguration,只看ContainerAutofig。我们还是正式进入项目吧。

/*** Guns Web程序启动类*/
public class GunsServletInitializer extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(GunsApplication.class);}
}

我们点击源码看看SpringBootServletInitializer。其实看名字就可看出是Servlet初始化,熟悉设这个ApplicationContext单词吗?应用上下文。很重要的,还有一个叫做BeanFactory,主要有个getBean方法,一般用前者。不懂的可以去看看我临摹别人的简单版Spring框架点这里

public abstract class SpringBootServletInitializer implements WebApplicationInitializer {protected WebApplicationContext createRootApplicationContext(ServletContext servletContext) {}protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder;}
}

今晚就先到这里吧,明早gogogo

基于SpringBoot的后台管理系统(启动类解析,开源的世界真好)(一)相关推荐

  1. 基于SpringBoot的后台管理系统(异常、注解、node、page)(二)

    common.exception.annotation.node.page 说明 如果您有幸能看到,请认阅读以下内容: 1.本项目临摹自abel533的Guns,他的项目 fork 自 stylefe ...

  2. 主流的基于SpringBoot的后台管理系统

    项目介绍 一款 Java 语言基于 SpringBoot2.x.Layui.Thymeleaf.MybatisPlus.Shiro.MySQL等框架精心打造的一款模块化.插件化.高性能的前后端分离架构 ...

  3. 基于jsp+SpringBoot美容院后台管理系统

    <基于jsp+mysql+mybatis的SpringBoot美容院后台管理系统>该项目采用技术HTML+CSS+JavaScript+jsp+mysql+mybatis+layui+ma ...

  4. 基于SpringBoot+VUE的宠物医院后台管理系统【源码开源】【建议收藏】

    基于SpringBoot+VUE的宠物医院后台管理系统[源码开源][建议收藏] 今天给大家开源一个基于SpringBoot+VUE的宠物医院后台管理系统,系统基于脚手架工程,花了大概1周时间做出来的. ...

  5. 狂神SpringBoot学习笔记12天-Day 06 基于SpringBoot的员工管理系统

    6.基于SpringBoot的员工管理系统 写在前面 参考CSDN博主Baret-H 原文链接(77条消息) 狂神Spring Boot 员工管理系统 超详细完整实现教程(小白轻松上手~)_Baret ...

  6. 基于SpringBoot框架的管理系统【完整项目源码】

    基于SpringBoot框架的管理系统 介绍 基于SpringBoot框架的管理系统 简洁版 : 实现 登录 . 注册 . 增 . 删 . 改 . 查 : 可继续完善增加前端.校验.其他功能等: 可作 ...

  7. 基于SpringBoot医院信息管理系统源码

    hisystem 1. 用idea打开项目,并且配置maven下载依赖 2. 导入数据库 hisystem.sql 3. 修改application.yml数据库相关配置 4. 用户注册,验证邮件的邮 ...

  8. 若依(基于SpringBoot的权限管理系统)集成MobileIMSDK实现IM服务端的搭建

    场景 若依(基于SpringBoot的权限管理系统)的快速搭建: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/111030441 ...

  9. 若依(基于SpringBoot的权限管理系统)的快速搭建

    场景 若依管理系统 基于SpringBoot的权限管理系统 官网地址: http://www.ruoyi.vip/ 下载地址: https://gitee.com/y_project/RuoYi 注: ...

最新文章

  1. 5个实用的例子,一行 Python 能干嘛?
  2. MOSS的SPBuiltInFieldId成员的字段类型对照关系表
  3. 二极管的结构、特性、参数、稳压管的特性和参数
  4. 互联网晚报 | 3月22日 星期二 |​ ​工作人员标注mu5735残骸并展开调查;万门大学疑似解散VIP群跑路...
  5. 怎么修改x轴_Origin绘图:共X轴Stack绘制分波态密度与绘图中的科学构思
  6. cocos+kbe问题记录
  7. jscript对URL参数进行编码与解码
  8. GIGO1.1数据清洗利器,文献计量同义词合并
  9. 用猿大师VLC播放程序与海康威视官方播放器在高版本Chrome播放RTSP视频流延迟效果对比!(视频演示)
  10. 2021年软考程序员考试大纲
  11. 新浪微博开放平台php sdk,新浪微博开放平台
  12. 无限级分销管理系统的设计与实现
  13. 二值化神经网络(BNN)综述
  14. cursor: not-allowed; readonly的升级版,鼠标经过时,显示为禁止图标
  15. oracle忘记密码找回
  16. 打瓶颈,破性能,性能大牛教你怎么玩转性能测试
  17. rancher拉取harbor私有镜像失败,报错ImagePullBackOff: Back-off pulling image
  18. 数学老师用数学课件制作工具快速三等分线段
  19. 高一计算机组装与维护教学总结,计算机组装与维护教学总结
  20. “猫爪杯”遭国人疯抢,“大白兔冰淇淋”在美国大火

热门文章

  1. oledb驱动Oracle,Oracle学习笔记:手工注册oracle的oledb驱动 | 学步园
  2. java斗地主怎么出牌_斗地主滑动选牌出牌(Cocos Creator)
  3. 如何搭建测试平台?理清思路很重要
  4. 什么是职场PUA?遇到以下这五种情况你就得当心了!
  5. matlab虚拟现实之V-Realm Builder2复制技巧(修改)
  6. 集宁哪有计算机培训班,集宁区有这么一个空间,叫共享自习室
  7. python模块与类的区别_Python类、模块、包的概念及区别
  8. dc综合与pt静态时序分析(中文)_新能源汽车小三电系统(PDU/DC/OBC)技术研究详解...
  9. 组合数字c语言do while,C语言初学do while语句(对输入数字字符,特殊符号等,进行统计).docx...
  10. 玩生死狙击找不到服务器怎么办,生死狙击手游进不了游戏解决方法 生死狙击手游进游戏诀窍...