------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
目录下了