SpringBoot学习

SpringBoot学习

1. SpringBoot入门

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

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.chenteng</groupId>
    <artifactId>helloworld</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>boot-01-helloworld-2</name>
    <description>Demo project for Spring Boot</description>

    <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!--配置处理器,为了开发方便,便捷了application.yml编写,但不建议进入打包内容中-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--不将便捷开发yml工具内容打进包里-->
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>


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

</project>

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

3. 自动配置原理入门

3.1 引导加载自动配置类

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
1. @SpringBootConfiguration

@Configuration。代表当前是一个配置类

2. @ComponentScan

指定扫描,spring注解;

3. @EnableAutoConfiguration
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}
3.1.1 @AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}
//利用Registor给容器中导入一系列组件
//将指定的一个包下的所有组件导入进来
3.1.2 @Import({AutoConfigurationImportSelector.class})

总结:

  • SpringBoot先加载所有的自动配置类
  • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值
  • 生效的配置类就会给容器中装配很多组件
  • 只要容器中有这些组件,相当于这些功能就有了
  • 只要用户有自己的配置,就以用户配置优先
  • 定制化配置
    • 用户使用@Bean替换底层组件
    • 用户查询该组件获取的配置文件的值去修改就行
3.2 最佳实践
  • 引入场景依赖
  • 查看自动配置了哪些(选做)
  • 是否需要修改
    • 参照文档修改配置项
    • 自定义加入或替换组件
    • ......

4. 开发小技巧

4.1 Lombok

在pom.xml中添加lombok

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

4.2 devtools 或 Jrebel(付费)热更新

4.3 SpringBoot默认文件夹

  • static文件夹放置静态资源
  • templates文件夹放置页面

3. SpringBoot2核心功能

配置文件

4. Web开发

4.1 官方介绍

4.2 简单功能分析

4.2.1 静态资源访问

1.静态资源目录

类路径下:staitc、public、resources、META-INF/resources

访问:当前项目根目录/ + 静态资源名

原理:静态映射/**

2.静态资源访问前缀

默认无前缀:http://localhost:8081/ 静态资源名

配置前缀方法:在application.yml进行修改

spring:
  mvc:
    static-path-pattern: /res/**

http://localhost:8081/ res/静态资源名

4.2.2 欢迎页支持

  • 静态资源路径下 index.html
    • 可以配置静态资源路径,不能配置静态资源访问前缀

4.2.3 自定义Favicon

当前网页图片获取方法:检查网页,Network中搜寻:favicon.ico,访问Headers下的Request URL,将图标右键下载

改变静态资源访问路径会导致Favicon功能失效

spring:
  mvc:
    static-path-pattern: /res/**

4.3 请求参数处理

4.4 响应数据与内容协商

4.5 试图分析与模本引擎

4.6 拦截器

4.7 跨域

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

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

posted @   lurenj  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示