Spring-boot01
本文记录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的更多相关文章
- Spring Boot--01错误处理
package com.smartmap.sample.ch1.controller.view; import java.io.IOException; import java.util.Collec ...
- 基于spring注解AOP的异常处理
一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- [Spring]IoC容器之进击的注解
先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- Spring之旅(2)
Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...
随机推荐
- 仿站-获取网站的所有iconfont图标
在仿站过程中,网站的iconfont查找非常浪费时间,这里教大家一次性获取网站iconfont的方法 1.打开 开发者工具 在element中搜索font-face,结果如下,复制font-face所 ...
- Java--ArrayList的遍历
三种遍历方式 一.for循环 二.for each 三.Iterator器遍历 Iterator it = list.iterator(); while(it.hasNext()){ syso(it. ...
- 基于 abp vNext 和 .NET Core 开发博客项目
项目介绍 此个人博客项目底层基于 ABP Framework (不完全依赖)搭建项目 和免费开源跨平台的 .NET Core 3.1 开发,可作为 .NET Core 入门项目进行学习,支持各种主流数 ...
- HDU 2006 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2006 题目大意:给你几个数,求奇数的乘积和 解题思路: 很水,不需要数组的,一个变量 x 就行 代码: ...
- Codeforces 1105D(Kilani and the Game,双队列bfs)
AC代码: #include<bits/stdc++.h> #define ll long long #define endl '\n' #define mem(a,b) memset(a ...
- 7、会话框添加查看get与post请求类型
前言 在使用fiddler抓包的时候,查看请求类型get和post每次只有点开该请求,在Inspectors才能查看get和post请求,不太方便.于是可以在会话框直接添加请求方式. 一.添加会话框菜 ...
- 《机器学习_02_线性模型_Logistic回归》
import numpy as np import os os.chdir('../') from ml_models import utils import matplotlib.pyplot as ...
- 简单而面试中又常见的知识点:JS执行机制
在开始讲解之前,我们先来看一段代码: console.log('1'); setTimeout(function() { console.log('2'); process.nextTick( ...
- 【Python】【第二节】【时间与日期处理模块】
转载至https://blog.csdn.net/p9bl5bxp/article/details/54945920 Python中提供了多个用于对日期和时间进行操作的内置模块:time模块.date ...
- 轻松扩展机器学习能力:如何在Rancher上安装Kubeflow
随着机器学习领域不断发展,对于处理机器学习的团队来说,在1台机器上训练1个模型已经有些难以为继,并且现在业界的共识是机器学习已经不仅仅是简单的模型训练. 在模型训练之前.过程中和之后,需要进行许多活动 ...