本文记录Spring-Boot学习途中的点点滴滴。

其实Spring-Boot出来好长时间了,但是一直没去关注过。之前在我的印象里Spring-Boot好就好在减去了很多XML配置,加入了很多自动配置,将注解运用到了极致。想想好像也没啥技术点可以去学习,不过最近打算用spring-Boot做个小网站啥的,才突然发现

Spring-Boot的强大。果真应了那句话:真香!

1.先来说下Spring-Boot入门大法:

按以往的项目经验,那没啥可说,MAVEN工程启动就完事儿了,但最近更新了下IDEA,发现项目启动项中多了一栏:



去Spring官网看了看,发现这玩意儿简直太好了,用这个Spring启动项,它会将SpringWEB开发中要用到的一切组件场景都一一给你罗列出来,这下方便了不用再去写POM了。直接勾选web服务IDEA就为你自动配置好了。还有什么Springdata,Nosql,SQL....这些场景你只需勾选IDEA会帮你自动配置。

这个插件实数良心。

项目部署完成后,我一脸懵逼,啥?没有WEB-INF目录,写个锤子的WEB呀。我JSP放哪儿?

果然太年轻,Spring-BOOT以JAR包的方式运行在内嵌的Tomcat下,根本不支持JSP。那用什么渲染前端?

答:HTML。

对就是这么简单,用最原始的HTML就行了,也不需要WEB-INF目录,Spring-Boot有自己的规定,Spring-Boot自动去以下目录:

"classpath:/META‐INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" "/"去找。

2、SpringBoot对静态资源的映射规则

查看源码我们可以发现,Spring-Boot对静态资源的几种映射规则:

if (!registry.hasMappingForPattern("/webjars/**")) { customizeResourceHandlerRegistration( registry.addResourceHandler("/webjars/**") .addResourceLocations( "classpath:/META‐INF/resources/webjars/") .setCachePeriod(cachePeriod)); }

所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;

webjars:以jar包的方式引入静态资源;

可以去WEBJAR的官网找到这些包。

http://www.webjars.org/

localhost:8080/webjars/jquery/3.3.1/jquery.js

3、模板引擎

既然不支持JSP,不可能只用原始的HTML吧?不会吧。不会吧。

答:支持Thymeleaf.

这玩意儿第一次使用还是在我开始学JAVA web的时候,总的来说跟JSP大同小异,但是句法更强大。总比C:那一套强多了!

Thymeleaf有自己的渲染规则,默认在classpath:/templates/"下对所有html进行渲染。为什么非得是/templates,我也不知道,源码是这么写的。。。

@ConfigurationProperties(prefix = "spring.thymeleaf") public class ThymeleafProperties { private static final Charset DEFAULT_ENCODING = Charset.forName("UTF‐8"); private static final MimeType DEFAULT_CONTENT_TYPE = MimeType.valueOf("text/html"); public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html";

跟之前的JSP句法规则对比:

4.配置文件

再来说说配置文件,之前什么SSM,ssh一大堆的配置文件到Spring-Boot都跑哪儿去了?

(Spring-Boot)答:爷不需要配置文件。

玩笑归玩笑,哪有不需要程序员去配置的项目。但是细看Spring-Boot底层源码,它已经将很多MVC,视图解析器,包扫描器等都已经自动注入场景了,根本不用去配置。

但是Spring-BOOT也提供了两个全局默认配置文件。

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

•application.properties

•application.yml

YAML(YAML Ain't Markup Language)

YAML A Markup Language:是一个标记语言

YAML isn't Markup Language:不是一个标记语言;

标记语言:

以前的配置文件;大多都使用的是 xxxx.xml文件; YAML:以数据为中心,比json、xml等更适合做配置文件;

YAML的句法可自行去了解,比起Properties.只能说有好有坏吧,本人比较喜欢用properties,但是面对复杂属性包装的时候比如:MAP,List等用YAML去配置简洁许多

5.注解

学新东西,必然得了解下一些注解的作用。

主程序类,主入口类:



@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;

@SpringBootConfiguration:Spring Boot的配置类; 标注在某个类上,表示这是一个Spring Boot的配置类;

@Configuration:配置类上来标注这个注解;

配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component

@EnableAutoConfiguration:开启自动配置功能; 以前我们需要配置的东西,Spring Boot帮我们自动配置;

@EnableAutoConfiguration告诉SpringBoot开启自 动配置功能;这样自动配置才能生效;

@AutoConfigurationPackage:自动配置包

@Import(AutoConfigurationPackages.Registrar.class): Spring的底层注解@Import,给容器中导入一个组件;

导入的组件由 AutoConfigurationPackages.Registrar.class;

将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

@Import(EnableAutoConfigurationImportSelector.class);

给容器中导入组件? EnableAutoConfigurationImportSelector:导入哪些组件的选择器;

将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中; 会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件, 并配置好这些组件;

今日到此结束。。每天记下日志框架和自动配置原理。

总结:有过SSM,SSH基础的来说学起来相当清爽,Spring-Boot砍掉这很多烦人的配置,规定了自己的渲染原则,总的来说确实比之前的开发效率强多了。

Spring-boot01的更多相关文章

  1. Spring Boot--01错误处理

    package com.smartmap.sample.ch1.controller.view; import java.io.IOException; import java.util.Collec ...

  2. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  3. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  4. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  5. [Spring]IoC容器之进击的注解

    先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...

  6. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  7. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  8. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  9. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  10. Spring之旅(2)

    Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...

随机推荐

  1. Vue实现靠边悬浮球(PC端)

    我想把退出登录的按钮做成一个悬浮球的样子,带动画的那种. 实现是这个样子: 手边没有球形图.随便找一个,功能这里演示的为单机悬浮球注销登录 嗯,具体代码: <div :class="[ ...

  2. 【T-SQL】基础 —— 语法(1)

    USE master--检查是否已经存在一个表,如果有就删除IF(EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ' ...

  3. 201771010113 李婷华 《面向对象程序设计(Java)》第十六周总结

    一.理论知识部分 1.程序是一段静态的代码,它应用程序执行蓝 是一段静态的代码,它应用程序执行蓝 是一段静态的代码,它应用程序执行蓝本. 2.进程是程序的一次动态执行,它对应了从代码加载.执行至执行完 ...

  4. 环境篇:Superset

    环境篇:Superset Superset 是什么? Apache Superset 是一个开源.现代.轻量的BI分析工具,能够对接多种数据源,拥有丰富的图表展示形式.支持自定义仪表盘,用户界面友好, ...

  5. 【Hadoop离线基础总结】通过Java代码执行Shell命令

    通过Java代码执行Shell命令 需求 在实际工作中,总会有些时候需要我们通过java代码通过远程连接去linux服务器上面执行一些shell命令,包括一些集群的状态管理,执行任务,集群的可视化界面 ...

  6. dp规划之矩阵连乘问题

    问题描述:给定n个矩阵{A1,A2,...,An},其中Ai与Ai+1是可乘的,我们要计算这n个矩阵的最少计算次数.  将多个矩阵连乘抽象为最后一次计算即两个矩阵相乘. public static v ...

  7. 如何应对Kubernetes的安全挑战?

    导读:Kubernetes的广泛使用证明了企业的信念,即他们不仅具有处理现代应用程序开发和现代化计划的复杂性的能力,而且具有大规模处理能力. 根据CNCF对各种规模的公司中1340位技术专家的最新调查 ...

  8. Python --函数学习1

    函数 -函数是代码的一种组织形式 -函数应该能完成一项特定的工作,而且一般一个函数完成一项工作 -函数的使用: 函数使用需要先定义 使用函数,俗称调用 pps:1.只是定义的话不会执行 2.def关键 ...

  9. PHP函数禁用绕过

    在渗透测试过程中可能经常会遇到上传webshell后,由于php.ini配置禁用了一些如exec(),shell_exec(),system()等执行系统命令的函数,导致无法执行系统命令,就此问题给出 ...

  10. spark机器学习从0到1特征提取 TF-IDF(十二)

        一.概念 “词频-逆向文件频率”(TF-IDF)是一种在文本挖掘中广泛使用的特征向量化方法,它可以体现一个文档中词语在语料库中的重要程度. 词语由t表示,文档由d表示,语料库由D表示.词频TF ...