springboot 尚桂谷学习总结01
------springboot 技术入门------
1.springboot 简介:
优点:
简化spring 应用开发的一个框架
整个spring技术栈的一个大整合
------微服务------
微服务:架构风格
一个应用时一组小型服务:通过http的方式进行互通
左侧为单体服务,右侧是微服务
每一个功能元素最终都是一个可以独立替换升级的软件单元
最后类似下面图:神经元,各个节点相互调用,每个功能单元都是完整的功能单元
单体应用:所有东西都写在一个应用上面, ALL IN ONE
------环境搭建------
对maven进行设置 setting.xml 配置文件的profiles标签添加
<profile> <id>JDK-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>
将maven整合到 idea 中
------spring mvc hello world------
1.新建一个maven项目
Enable-auto-import maven自动导入包
2.导入依赖spring boot 包
https://projects.spring.io/spring-boot/#quick-start spring 官网 快速开始
pom 文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lixuchun</groupId> <artifactId>spring-boot-01-helloworld</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
3.编写一个主程序
package com.lixuchun; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @SpringBootApplication 来标注一个主程序 说明这是一个springboot应用 * */ @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { SpringApplication.run(HelloWorldMainApplication.class,args); } }
4.编写一个Controller
package com.lixuchun.com.lixuchun.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HelloController { @ResponseBody @RequestMapping("/hello") public String hello() { return "hello world"; } }
5.运行开始
可能会报错:端口号占用
进行测试:
进入到主程序
最后在8080成功运行项目
出现这个页面 部署成功
6,部署项目简化,不需要打war包
创建一个可执行的jar包 https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
maven插件导入到 pom 中 可以将应用打包成jar包
左侧蓝框中为打包 package 命令执行后生成的 jar 文件
可以使用 java -jar adress 启动springboot 项目
-----hello world 探究 ------
pom 文件
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent>
pom文件有父项目 点入 spring-boot-starter-parent
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.0.1.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath> </parent>
其中还有 点入 spring-boot-dependencies
此pom文件是springboot 所有的版本依赖,此后导入不需要版本,由此文件管理
导入的依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
spring-boot-starter-web:
spring-boot-starter : 场景启动器 帮我们导入web模块正常运行所依赖的jar包,版本受父项目仲裁
spring boot 将所有场景都抽取出来 做成 starters 需要什么功能导入什么启动器
场景启动器 : https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#using-boot-starter
2. 主程序类 主入口类
package com.lixuchun; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.stereotype.Controller; @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { SpringApplication.run(HelloWorldMainApplication.class,args); } }
@SpringBootApplication :spring boot 应用标注在某个类上市springboot的主配置类 springboot 就应该运行这个类的
main 方法来启动springboot应用
注解点进去 发现时组合注解:
@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} )}
@SpirngbootConfiguration 的配置类:
标注在某个类上 表示这个是一个springboot 的配置类
点进 @SpringbootConfiguration(springboot提供) 有 @Configuration(spring 提供):配置类上来标注这个注解
点进去 @Configuration(spring 提供) -》 调用 @Component
@EnableAutoConfiguration:开启自动配置功能;
spring 自己配置东西, springboot 帮助我们自动配置,@EnableAutoConfiguration 告诉springboot 开启配置功能,才能生效
@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class})
@AutoConfigurationPackage:自动配置包,将主配置类 @springbootApplication注解标注类的所在包以及子包组件扫描到spring容器中
@Import({AutoConfigurationImportSelector.class})
spring底层注解@import 给容器一个组件 导入组件由,AutoCOnfigrationImportSelector 导入哪些组件的选择器,导入组件以
全类名的方式返回 这些组件添加到容器中
会给容器中导入非常多的自动配置类(xxxAutoConfiguration):就是给容器中场景导入该场景所有类 如下图绿色部分
有了此自动装配类 可以免去我们自己编写配置注入功能的组件工作
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()); Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct."); return configurations; }
查看 loadFactoryNames 调用 loadSpringFactories
spring boot 在穷的时候在类路径下META-INFO/spring.factories 中取得EnableAutoConfiguration的指定值
将这些值作为启动参数导入到容器中 自动配置类就生效了 就可以帮助我们进行自动配置工作
以前需要自己配置的东西 自动配置类都帮助我们配置了
j2EE 的整体解决方案 都在 下面:
C:\Users\UPC\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.1.RELEASE\
spring-boot-autoconfigure-2.0.1.RELEASE.jar
目录下了