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;
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 注解标注在那个方法上,该方法就是主启动类
@SpringBootApplication注解的配置类
标注在某个类上表示这是一个springboot配置类
@Configuration:配置类上来标注这个注解;
配置类--配置文件;配置类也是容器中的额一个组件;@Component
@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字面直接来写字符串不用加引号
"":双引号 不会转义特殊字符\n--->换行
'':单引号 会转义特殊字符 \n--->\n
对象 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 //默认值