博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot学习笔记(一)——基础知识
阅读量:3899 次
发布时间:2019-05-23

本文共 7358 字,大约阅读时间需要 24 分钟。

springboot学习笔记(一)——基础知识

maven依赖

org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE

启动类

  • @SpringBootApplication包括
    • Spring的@Configuration:标明该类使用Spring基于Java的配置。
    • Spring的@ComponentScan:启用组件扫描,Web控制器类和其他组件才能被
      自动发现并注册为Spring应用程序上下文里的Bean。
    • Spring Boot 的 @EnableAutoConfiguration :就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成的配置了
  • run 方法

通过调用run,将业务委托给了Spring Boot的SpringApplication类。SpringApplication将引导我们的应用,启动Spring,相应地启动被自动配置的Tomcat web服务器。我们需要将 helloMain.class 作为参数传递给run方法来告诉SpringApplication谁是主要的Spring组件。为了暴露任何的命令行参数,args数组也会被传递过去。

package com.antRain;import org.springframework.boot.Banner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;//标识持久层mapper接口,用来找到mapper对象@MapperScan("com.antRain.Dao")@SpringBootApplicationpublic class helloMain {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(helloMain.class); application.setBannerMode(Banner.Mode.OFF); application.run(args); }}
  • SpringBoot相关注解

    • @EnableAutoConfiguration自动载入应用程序所需的所有Bean。该注解组合了@Import注解.
    • @Import注解导入了EnableAutoCofigurationImportSelector类,它使用SpringFactoriesLoader.loaderFactoryNames方法来扫描具有META-INF/spring.factories文件的jar包。而spring.factories里声明了有哪些自动配置
    • @SpingBootApplication是 SpringBoot的核心注解,主要目的是开启自动配置。它也是一个组合注解,主要组合了@Configurer,@EnableAutoConfiguration(核心)和@ComponentScan。可以通过@SpringBootApplication(exclude={想要关闭的自动配置的类名.class})来关闭特定的自动配置
    • @ImportResource加载xml配置的
    • @AutoConfigureAfter在指定的自动配置类之后再配置
    • @AutoConfigureBefore自动配置类需要在另外指定的自动配置类配置之前
  • Spring Boot 配置文件加载优先级如下:

Devtools全局设置属性在路径 (~/.spring-boot-devtools.properties 当devtools激活的时候).

测试用例上的 @TestPropertySource .
测试用例上的 @SpringBootTest#properties注解.
命令行参数.
配置在SPRING_APPLICATION_JSON 的属性(环境变量或系统属性中内嵌的内联JSON).
ServletConfig初始化参数.
ServletContext 初始化参数.
配置在 java:comp/env的 JNDI(Java Naming and Directory Interface) 属性.
Java系统属性 (System.getProperties()).
操作系统OS(Operating System)环境变量.
RandomValuePropertySource 中的属性只包括在包random.*.
没有打进jar包的Profile-specific 应用属性 (application-{profile}.properties 和 YAML ).
打进jar包中的Profile-specific 应用属性 (application-{profile}.properties 和 YAML).
没有打进jar包的应用配置 (application.properties 和 YAML).
打进jar包中的应用配置(application.properties 和 YAML).
@Configuration类上的@PropertySource注解 .
默认属性 (配置在文件 SpringApplication.setDefaultProperties).

  • 配置文件位置读取优先级
    • application.properties 或者 application.yml 读取优先级如下:
    • file:./config/当前位置的子目录/config 下
    • file:./当前位置
    • classpath:/config/classpath /config 的包中
    • classpath:/classpath的根目录

yml

  • 以数据为中心,比json、xml等更适合做配置文件;
server:    port: 8081    path: /hello

1、基本语法

  • k:(空格)v:表示一对键值对(空格必须有);
  • 空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
  • 属性和值也是大小写敏感;

2、值的写法

  • 字面量:普通的值(数字,字符串,布尔)

k: v:字面直接来写;

字符串默认不用加上单引号或者双引号;
“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

  • 对象、Map(属性和值)(键值对):

k: v:在下一行来写对象的属性和值的关系;注意缩进

对象还是k: v的方式
行内写法:

friends: {
lastName: zhangsan,age: 18}
  • 数组(List、Set):

用- 值表示数组中的一个元素

users: - 张三 - 李四

行内写法

users: [张三,李四]

controller

  • application.yml
user:  id: 1  name: lisi  pawd: 123456
  • Java类
package com.antRain.controller;import com.antRain.service.UserService;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.ComponentScan;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;@Controller@ComponentScan({
"com.antRain.service"})public class hello {
//读取配置文件里面的内容 @Value("${user.id}") private Integer id; @ResponseBody @RequestMapping("/hello") public String hello(){
return "hello 用户"+id; } @Autowired private UserService userService; @RequestMapping("getUser/{id}") public String GetUser(@PathVariable int id){
return userService.getUser(id).toString(); }}/** SpringMVC部分 @RequestMapping 用于映射Web请求,包括访问路径和参数 ResponseBody 支持将返回值放在response内,而不是一个页面 @PathVariable 用于接收路径参数 @RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody @ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上, @ExceptionHandler 用于全局处理控制器里的异常 @InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。 @ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。*** */
  • 类的相关注解

    • @Controller控制层: 用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象,分发处理器会扫描使用该注解的类的方法。并检测该方法是否使用了@RequestMapping注解。
    • @RestController: 告诉Spring以字符串的形式渲染结果,并直接返回给调用者其实就是@Controller和@ResponseBody注解加在一起返回json数据
  • 方法的相关注解

    • @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML, 一般在异步获取数据时使用;
    • @RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径; 用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法
  • Spring注解

    • @Service用于标注业务层组件
    • @Controller用于标注控制层组件(如struts中的action)
    • @Repository用于标注数据访问组件,即DAO组件
    • @Component泛指组件,可以注解其他类注解,当组件不好归类的时候,我们可以使用这个注解进行标注
    • @Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
    • @ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中
    • @Conditional注解可以根据代码中设置的条件装载不同的bean,在设置条件注解之前,先要把装载的bean类去实现Condition接口,然后对该实现接口的类设置是否装载的条件。
    • @Import通过导入的方式实现把实例加入springIOC容器中。可以在需要时将没有被Spring容器管理的类导入至Spring容器中。
    • @ImportResource导入配置文件。
  • SpringMvc 注解

    • @RequestMapping 用于映射Web请求,包括访问路径和参数
    • @ResponseBody 支持将返回值放在response内,而不是一个页面,默认类中的方法都会以 json 的格式返回
    • @PathVariable 用于接收路径参数
    • @RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody
    • @ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,
    • @ExceptionHandler 用于全局处理控制器里的异常
    • @InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。
    • @ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的 @RequestMapping都能获得在此处设置的键值对。

restful接口

  • GET:一般用于查询数据,不办函数据的更新以及插入操作。由于明文传输的关系,我们一般用来获取一些无关用户的信息。
  • POST:一般用于数据的插入操作,也是使用最多的传输方式,但是在H5调用时会有跨域的问题,一般使用JSONP来解决。
  • PUT:我们使用PUT方式来对数据进行更新操作。
  • DELETE:用于数据删除,注意在数据库内是逻辑删除(改变数据状态,用户不再查询得到,但还保留在数据库内)还是物理删除(真删了)。

@Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持
  • application.yml
car:  color: white  length: 4499  name:    - porsche    - Bill  buy: 2019/12/25  parts:  {
"峰值扭矩": "260Nm", "加速度": 50}
  • Car.java
package com.antRain.bean;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;import java.util.Date;import java.util.List;import java.util.Map;@Component@ConfigurationProperties(prefix = "car")public class Car {
private List
name; //车的名称 @Value("${car.color}") private String color ;//颜色 @Value("#{2*2100}") private Integer length;//长度mm private Date buy;//购买日期 private Map
parameter;//参数信息}

转载地址:http://hhden.baihongyu.com/

你可能感兴趣的文章
在 2016 年做 PHP 开发是一种什么样的体验?(一)
查看>>
PHP获取客户端的IP
查看>>
从头开始学习yii2---1.搭建yii2开发环境
查看>>
从头开始学习yii2---3.语言包的配置
查看>>
yii2-表单验证的一些规则
查看>>
索引相关问题
查看>>
php面试可能会被问道的技术题汇总
查看>>
php面试题1-线程和进程的区别(顺带提下协程)
查看>>
php面试题2-用到过的传输协议
查看>>
php面试题3-yii2和yii的不一样的地方
查看>>
IOS 一些好的框架和 技术大牛的博客
查看>>
Java 和 Object-c的区别
查看>>
Windows环境下Android NDK环境搭建
查看>>
NDK Build 用法(NDK Build)
查看>>
Android NDK开发起步Hello Jni
查看>>
[已解决]AutoCompleteTextView 不显示匹配的内容,因为将空的内容添加进去了
查看>>
object c的浅拷贝(地址拷贝)和深拷贝(对象拷贝)
查看>>
object c son字符串的解析
查看>>
object c 非常强大的类的属性复制kcv键值码赋值
查看>>
Java中普通代码块,构造代码块,静态代码块区别及代码示例
查看>>