SpringBoot学习

lurenj / 2023-08-07 / 原文

SpringBoot学习

1. SpringBoot入门

1.1 Springboot Web项目pom.xml基本配置

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	
	<dependencies>
		<!--启动器-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>


		<!--web依赖: tomcat,dispatcherServlet,xml....-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--spring-boot-starter所有依赖都是以此开头-->
		<!--单元测试-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!--lombok-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

		<!--thymeleaf两个依赖-->
		<dependency>
			<groupId>org.thymeleaf</groupId>
			<artifactId>thymeleaf-spring5</artifactId>
		</dependency>
		<dependency>
			<groupId>org.thymeleaf.extras</groupId>
			<artifactId>thymeleaf-extras-java8time</artifactId>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>


			<!--在这里修改版本-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.4.3</version>
			</plugin>
			<!---->
		</plugins>
	</build>

1.2 主程序

//程序主入口不能删,不能改
@SpringBootApplication
//方法名(HelloworldApplication)可变
public class HelloworldApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloworldApplication.class, args);
	}

}

1.3 编写业务

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String handle(){
        return "Hello Spring Boot 2";
    }
}

1.4 测试

直接运行main方法

1.5 简化配置

application.properties

#核心配置文件
server.port=8081

#关闭模板引起的缓存
spring.thymeleaf.cache=false

1.6 简化部署

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>


			<!--在这里修改版本-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.4.3</version>
			</plugin>
			<!---->
		</plugins>
	</build>

把项目打成jar包,直接在目标服务器执行即可。

了解自动配置原理

1. SpringBoot特点

1.1 依赖管理

  • 父项目做依赖配置
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

他的父项目
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.7.5</version>
  </parent>
几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁
  • 开发导入starter场景启动器
1.spring-boot-starter-*:*就某种场景 如:spring-boot-starter-web
2.可自定义Start属于高阶内容,地址网站也有介绍
SpringBoot官方所有支持的场景地址:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters
  • 无需关注版本号,自动版本仲裁
  • 可以修改版本号
  1.查看spring-boot-dependencies里面规定当钱依赖的版本用的key
  2.在当前项目里面重写配置

1.2 自动配置

  • 自动配好Tomcat

  • 自动配好SpringMVC

    • 引入SpringMVC全套组件
    • 自动配好SpringMVC常用组件(功能)
  • 自动配好Web常见功能,如:字符编码问题

    • SpringBoot帮我们配置好了所有web开发的常见场景
  • 默认的包结构

    • 主程序所在包及其下面的所有子包里面的组件都被默认扫描进来
    • 无需以前的包扫描配置
    • 想要改变扫描路径
      • @ComponentScan()
      • @SpringBootApplication(scanBasePackages = "com.learn")
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan("com.learn.boot")
    等同于
    @SpringBootApplication
    
  • 各种配置拥有默认值

    • 默认配置最终都是映射到某个类上的
    • 配置文件的值最终会绑定某个类上,这个类会在容器中创建对象
  • 按需加载所欲偶自动配置项

    • 引入哪些场景,引入的场景会自动配置
    • SpringBoot所有自动配置功能都在

2. 容器功能

2.1 组件添加

1.@Configuration

  1. 基本使用
  2. Full模式与Lite模式
    1. 实例
    2. 最佳实战
      1. 配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
      2. 配置类组件之间有依赖关系,方法会被调用得到之间单实例组件,用Full模式
/**
 * 配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
 */
@Configuration//告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
    @Bean//给容器中添加组件。以方法名作为组件的id,返回类型就是组件类型返回值就是组件在容器中的实例
    public User user(){
        return new User("zhangsan",18);
    }
}

2.@Bean:给容器中添加组件、@Component:代表组件、@Controller:代表控制器、@Service:代表业务逻辑组件、@Repository:代表数据库层组件

3.@ComponentScan:代表通过包扫描指定包扫描规则、@Import:给容器中导入组件

@Import({DBHelper.class}) 给组件中自动创建这个类想的组件,默认组件的名字就是全类名

4.@Conditional

​ 条件装配:满足Conditional指定的条件,则进行组件注入

5.ConfigurationProperties

​ 导入spring配置

2.2配置绑定

1.@ConfigurationProperties

2.@EnableConfigurationProperties + @ConfigurationProperties

3.@Component + @ConfigurationProperties

问题一:pom.xml中添加lombok后未生效

解决办法:沒辦法new對象 和使用getter setter的 要去IDEA左上角 File->setting->Plugins找lombok插件安裝