SpringBoot学习笔记(一)

一、SpringBoot

1,SpringBoot简介

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
    Spring框架是Java平台的一种开源框架,提供有控制反转特性的容器(ioc容器),ioc旨在方便项目维护和测试,他提供一种通过Java的反射机制对Java的对象进行统一的配置和管理的方法,同时通过ioc容器管理对象的生命周期,通过扫描xml文件或类上特定Java注解来配置对象,程序员可以通过依赖查找和依赖注入来获取对象。springAop框架基于代理模式,aop框架针对模块之间的交叉点进行模块化。spring框架下的事务管理,远程访问等功能均可以通过使用SpringAOP技术实现,spring的事务管理框架为Java平台带来了一种抽象机制,使所有的事务能够与保存点一起工作,并且可以在
    在 Spring 体系中,Spring Boot JPA 就是约定优于配置最佳实现之⼀,不需要关注表结构,我们约定类名即是表名,属性名即是表的字段,String 对应 varchar,long 对应 bigint,只有需要⼀些特殊要求的属性,我们再单独进⾏配置,按照这个约定我们可以将以前的⼯作⼤⼤的简化。Spring Boot 体系将约定优于配置的思想展现得淋淋尽致,⼩到配置⽂件,中间件的默认配置,⼤到内置容器、⽣态中的各种 Starters ⽆不遵循此设计规则。Spring Boot ⿎励各软件组织⽅创建⾃⼰的 Starter,创建
Starter 的核⼼组件之⼀就是 autoconfigure 模块,也是 Starter 的核⼼功能,在启动的时候进⾏⾃动装配,属
性默认化配置。
可以说正是因为 Spring Boot 简化的配置和众多的 Starters 才让 Spring Boot 变得简单、易⽤、快速上⼿,也可以说正是约定优于配置的思想的彻底落地才让 Spring Boot ⾛向辉煌。Spring Boot 约定优于配置的思想让Spring Boot 项⽬⾮常容易上⼿,让编程变的更简单,其实编程本该很简单,简单才是编程的美。

2,微服务

微服务:架构风格
一个应用是一组小型服务:可以通过hTTP的方式进行互通
单体应用:每一个功能元素最后都是可以独立升级替换的服务单元

3,环境约束

jdk 推荐1.7及以上
maven 推荐3.3及以上
Intellij IDEA sts
spring Boot1.5.9

4,SpringBoot helloworld

1,创建一个maven工程
2,导入springboot相关依赖
<dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
       </dependency>

       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       
3,编写一个主程序
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {
   public static void main(String[] args) {
       SpringApplication.run(HelloWorldApplication.class,args);

  }
}

5,springboot 探究hello world

1,父项目

<parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.1.8.RELEASE</version>
</parent>
他的父项目 。。。。。

导入依赖有默认版本不需要导入版本号

没有在dependencies里面管理的需要导入版本号

2,导入依赖

        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

spring-boot-starter:springboot的场景启动器,导入了web的依赖版本模块

springboot将所有的功能场景都抽取出来,做成一个starter启动器,使用时导入相关场景启动器。

3,主程序类,入口类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {
   public static void main(String[] args) {
       SpringApplication.run(HelloWorldApplication.class,args);

  }
}

@SpringBootApplication 注解标注在那个方法上,该方法就是主启动类

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

@SpringBootApplication注解的配置类

标注在某个类上表示这是一个springboot配置类

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

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

@EnableAutoConfiguration 开启自动配置功能

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage 自动配置包

@Import({Registrar.class})
spring的底层导入注解@import给容器中导入一个组件:导入的组件Registrar.class
将主配置类(@SpringBootApplication标注的类)的包以及下面所有子包扫描进配置类
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}

@Import({AutoConfigurationImportSelector.class})

给容器中导入组件,导入的就是后面的类的组件

导入的组件以全路径类名的方式返回,这些组件就会被添加到容器中

会给容器导入非常多层次的自动配置类:XXXAutoConfiguration就是给容器中导入自动配置的组

6,SpringInitializer快速创建springboot项目

默认生成的springboot项目

主程序已经生成好了,我们只需要我们自己的逻辑

resource文件夹的目录架构

static保存静态资源:js/css/image

templates:保存所有的模板页面 :(spring Boot默认jar包使用嵌入式的tomcat)可以使用模板引擎

application.properties:springboot应用的配置文件

二、配置文件

1、配置文件

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

application.properties

application.yml

配置文件的作用,就是修改springboot的默认值

yaml(yaml ain`t Markup language)

标记语言

以前的配置文件都是XXX.xml

properties:

    server.port=8080;

yml

    server:  
port: 8081

xml

<server>
<port>8082</port>
</server>

2、yml语法

1,基本语法

K: V表示一对键值对(空格必须要)

以空格的缩进来控制层级关系:只要是左对齐的一列数据,都是一个层级的

    server:  
port: 8081
path:/hello

2,值的写法

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

k:v字面直接来写字符串不用加引号

"":双引号 不会转义特殊字符 --->换行

'':单引号 会转义特殊字符 --->

对象 Map(属性和值)(键值对)

k:v 对象还是这种方式

friend:

lastName: zhangsan

age: 20

行内写法

friend: {lastName: zhangsan,age: 20}

数组(list,set)

用-短横线表示数组中的一个元素

pets:
-cat
-dog

行内写法

pets: [cat,dog]

3,@value获取值和@ConfigurationProperties获取值比较

 @CONFIGURATIONPROPERTIES@VALUE
功能 批量注入 单个注入
松散语法 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

配置文件yml还是properties都能获取到值

如果说,我们只是在配置文件中获取某个值使用@Value来何配置文件

如果说,我们专门编写一个JavaBean,我们就直接使用@ConfigurationProperties

 

/*
* 将配置文件的值映射到配置文件中(
* @ConfigurationProperties 把配文件的值和Person的属性进行绑定
* */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
  // @Value("${person.last-name}")
  private String lastName;

@PropertySource加载制定配置文件&@ImportSource

@PropertySource

@PropertySource(value = {"classpath:application.properties"})
@Component
@ConfigurationProperties(prefix = "person")

@ImportSource导入spring配置文件 让里面的内容生效

Spring Boot里面没有spring的配置文件,我们自己写的也没办法生效

 

@ImportResource(locations = {"classpath:beans.xml"})

Spring Boot推荐添加组件方式

推荐使用全注解的方式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd>
  <bean id="helloService" class="com.xja.hellodemo2.demo.service.HelloService"></bean>
</beans>

1配置类====spring配置文件

/*
* @Configuration当前类是个配置类
* <bean>添加
* */
@Configuration
public class MyAppConfig {
//将方法的返回值添加到容器中,容器中这个组件默认id就是方法名
  @Bean
  public HelloService helloService(){
      System.out.println("成了");
      return new HelloService();
  }

}

4、配置文件占位符

1、随机数

person.last-name= zhangsan${random.uuid};
person.age=${random.int}
//随机数

2、占位符获取之前配置的值,如果没有:默认值

person.dog.name=${person.hello:hello}_dog
//默认值
原文地址:https://www.cnblogs.com/liudongshuai/p/11638130.html