Java教程

SpringBoot篇

本文主要是介绍SpringBoot篇,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

SpringBoot2核心技术基础入门

01.spring和springboot

01.springboot入门

1、添加配置

	<parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.3.4.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies> 
    
    <!--打包配置-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2、编写主启动类

@org.springframework.boot.autoconfigure.SpringBootApplication
public class SpringBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
}

3、创建application.yml配置文件

server:
  port: 8888
  servlet:
    context-path: /atguigu

4、编写controller

@RestController
public class DemoController {

    @RequestMapping("/hello")
    public String test1() {
        return "hello World";
    }
}

02.了解自动配置原理

1.springboot特点

1.1 依赖管理
	<parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.3.4.RELEASE</version>
    </parent>
    <!-- 他的父项目 -->
    <parent>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-dependencies</artifactId>
	    <version>2.3.4.RELEASE</version>
  	</parent>
  	<!-- 进入spring-boot-dependencies,里面声明了几乎开发中所有常用依赖的版本,即springboot的仲裁机制 -->
  	<!-- 要想覆盖默认版本,可以在properties中配置 -->
  	<properties>
        <mysql.version>5.1.43</mysql.version>
    </properties>
    
    <!-- 也可以在对应坐标中声明要是用的版本,该方式优先级最高 -->
    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
    </dependency>

开发导入starter启动管理

1、见到很多spring-boot-starter-*,*就是指某种场景
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3、*-spring-boot-starter,第三方为我们提供的简化开发的启动器,即自定义启动器
4、所有场景启动器最底层的依赖(springboot自动配置的核心的依赖)
	<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.3.4.RELEASE</version>
      <scope>compile</scope>
    </dependency>

无需关注版本号,自动版本仲裁

1、引入依赖都可以默认不写版本号
2、引入非版本仲裁的jar,要写版本号
1.2 自动配置

自动配好tomcat
引入tomcat依赖
配置tomcat

	<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.3.4.RELEASE</version>
      <scope>compile</scope>
    </dependency>

自动配置好springMVC

  • 引入springMVC全套组件
  • 自动配好springMVC常用组件(功能)

自动配好web常见功能,如:字符编码问题

  • springBoot帮我门配置好了所有web开发的常见场景

默认包结构

  • 主程序所在包及其下面的所有子包里面的组件都会被默认扫描出来
  • 无需以前的包扫描配置
  • 想要改变扫描路径,@SpringBootApplication(scanBasePackages = “com.tom”)
    或者@ComponentScan指定扫描路径
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.tom.demo")

各种配置拥有默认值

  • 默认配置最终都是映射到对应的类上面,例如文件上传MultipartProperties
    ey:springboot配置文件中配置上传文件的大小在这里插入图片描述
  • 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象

按需加载所有自动配置项

  • springboot有非常多的starter
  • 引入那个场景这个场景的自动配置才会开启
  • springboot所有的自动配置功能都在spring-boot-autoconfigure这个包里面
	<dependency>
	      <groupId>org.springframework.boot</groupId>
	      <artifactId>spring-boot-autoconfigure</artifactId>
	      <version>2.3.4.RELEASE</version>
	      <scope>compile</scope>
    </dependency>
其实springBoot对于依赖的管理就是通过<artifactId>spring-boot-dependencies</artifactId>
中对常用的依赖进行同意管理起来,其中还包含版本号等信息,这也就是所谓springboot
的依赖版本仲裁。
至于springboot的按需加载其实就是通过<artifactId>spring-boot-starter-*</artifactId>对
需要的相关依赖按照需要进行加载,进行web开发<artifactId>spring-boot-starter-web</artifactId>
就可以写web

2 容器功能

2.1容器功能

1、@Configuration
1)配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单例的
2)配置类本身也是组件
proxyBeanMethods:代理bean的方法
Full(proxyBeanMethods = true)
Lite(proxyBeanMethods = false)

@Configuration用来标明这个类是一个配置类,
springboot2中多该注解多出来一个属性@Configuration(proxyBeanMethods = true),
默认是true,即被调用的时候会去检查被调用的对象在容器中有没有,对象之间依赖
关系都是容器中的;当@Configuration(proxyBeanMethods = false),
对象之间的依赖就不是同一个了。举个荔枝:一个person对象中有一个pet对象,
当为true的时候,person  get出来的pet对象和单独get出来的pet对象相等,或者说是同一个,都是容器里面的pet对象;
当为false,person  get出来的pet对象和单独get出来的pet对象不相等,person  的pet和
容器中的pet已经不是同一个
  • 基本使用
  • Full模式和Lite模式
    配置类组件之间无依赖关系就是用Lite模式加速容器启动速度,较少判断
    配置类之间如果有依赖关系,方法会被调用得到之前单实例组件,用Full模式

2.2 原生配置文件引入

1、@ImportResource(“classPath:bean.xml”)导入Spring的配置文件

2.3 配置绑定

1、@ConfigurationProperties
注:@ConfigurationProperties该注解中prefix 不支持驼峰方式的命名

/**
 * @ClassName Shoes
 * @Description 只有在容器中的组件,才会拥有springboot提供的强大功能,
 *              因此该对象需要被放进容器中@Component
 */
@Component
@ConfigurationProperties(prefix = "myshoes")
public class Shoes {
    private String brand;
    private String much;
}

application.yml

server:
  port: 8888
myshoes:
  brand: newBalance
  much: 1000

 @Autowired
    Shoes shoes;

    @RequestMapping("/getShoes")
    public Shoes getShoes() {
        return shoes;
    }
    
输出结果:{"brand":"newBalance","much":"1000"}

2、@EnableConfigurationProperties(Shoes.class)
开启Shoes绑定功能,同时将Shoes注入到容器中。
应用场景:有时候我们引入一些对象是源码,无法修改但是,就可以使用该注解,添加到配置类上,然后配置类就可以从容器中引用该对象了。

自动配置原理入门

3.1 引导加载自动配置类

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

这篇关于SpringBoot篇的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!