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

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

说明

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

  • 1、本项目临摹自abel533的Guns,他的项目 fork 自 stylefengGuns!开源的世界真好,可以学到很多知识。

  • 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 {

    @Override
    protected 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介:历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值