SpringBoot基础入门

1、SpringBoot 入门

1)、系统要求

Java 8 & 兼容java14 .

​ Maven 3.3+

​ idea 2019.1.2

1.1 Maven设置

需要在maven的配置文件setting.xml中加入或修改:

  <mirrors>
      <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      </mirror>
  </mirrors>
 
  <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>
  </profiles>

2)、HelloWord

2.1、创建maven工程

需求:浏览器发送"/hello"请求,响应 Hello,Spring Boot !

2.2、引入依赖

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


    <!-- Web相关依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

2.3、创建主程序

/**
 *
 * 主程序类
 *
 * @SpringBootApplication:这是一个SpringBoot应用
 *
 * @author: Herz
 * @date: 2021/5/19 9:35
 */

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class);
    }
}

2.4 、编写业务逻辑

/**
 * @author: Herz
 * @date: 2021/5/19 9:40
 */

//@ResponseBody
//@Controller

@RestController
public class HelloController {

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

2.5、测试

直接运行主程序的main方法

2.6、简化配置

只需要编写一个配置文件:application.properties

#修改Tmocat服务器端口号
server.port=8888

2.7、简化部署

只需要在Maven项目的pom.xml配置文件中加入以下:

<!-- 部署插件 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

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

2、SpringBoot自动配置原理

1)、SpringBoot的特点

1.1、依赖管理

  • 父项目做依赖管理
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
    </parent>

    它的父项目
    <parent>
        <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
        <version>2.4.5</version>
      </parent>
    这个里面几乎声明了所有开发所需要的依赖版本声明即自动版本仲裁机制
  • 开发导入starter场景启动器

    1、spring-boot-starter-*         *就是某种场景
    
    2、只要引入 starter,该场景的所有常规依赖都会自动导入
    
    3、SpringBoot 所有支持的场景:https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
    
    4、其他:*-spring-boot-starter  :第三方提供的简化开发的场景启动器
    
    5、所有场景启动器的最底层的依赖:
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.3.4.RELEASE</version>
      <scope>compile</scope>
    </dependency>
  • 无需关注版本号,自动版本仲裁机制
  • 修改版本号

(以下以 MySQL 5.1.49版本为例,默认的 MySQL版本为8.0.23)

引入依赖
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>


1、查看 spring-boot-dependencies 里面规定当前依赖的版本的 key ;
2、在Maven项目的pom.xml配置文件中重写配置:
    <properties>
        <mysql.version>5.1.49</mysql.version>
    </properties>

1.2、自动配置

  • 自动配好Tomcat

    • 自动引入Tomcat依赖

          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-tomcat</artifactId>
              <version>2.4.5</version>
           </dependency>
    • 配置Tomcat
  • 自动配好SpringMVC

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

    • 主程序所在的包及其下的所有子包里面的组件都会被扫描进来
    • 无需以前的包扫描配置
    • 想要改变包扫描路径:@SpringBootApplication(scanBasePackages = "com.tianfei")

    或者@ComponentScan("com.tianfei") 指定包扫描路径

    @SpringBootApplication
    等同于
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan("com.tianfei.boot")
  • 各种配置拥有默认值

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

2)、容器功能

2.1、组件添加

1、@Configuration

  • 基本使用
  • Full与Lite模式

    • 示例
    • 最佳实战

      • 配置类之间有组件依赖关系,方法会被调用得到之前单示例组件,则使用Full模式。
      • 配置类之间没有组件依赖关系,使用Fite模式,加速启动过程,减少判断。

        #############################################Configuration使用示例##################################################
        package com.tianfei.boot.config;
        
        import com.tianfei.boot.bean.Pet;
        import com.tianfei.boot.bean.User;
        import org.springframework.context.annotation.Bean;
        import org.springframework.context.annotation.Configuration;
        
        /**
         *
         * 1、配置类中使用 @Bean 标注在方法上给容器注册组件。默认是单实例的
         * 2、配置类本身也是组件
         * 3、proxyBeanMethods:代理bean的方法
         *      Full (proxyBeanMethods = true)  解决组件依赖
         *      Lite (proxyBeanMethods = false)  跳过检查容器中是否存在该实例,启动较快
         *
         *
         * @author: Herz
         * @date: 2021/5/19 15:00
         */
        @Configuration(proxyBeanMethods = true)  //告诉SpringBoot 这是一个配置类  ==  配置文件
        public class MyConfig {
        
            /**
             * 外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例
             * @return
             */
            @Bean     // 给容器中添加组件。以方法名作为组件的id。返回值类型就是组件类型。返回的值就是容器中实例
            public User user001(){
                User user = new User("张三", 18);
                user.setPet(tomcat());
                return user;
            }
        
            @Bean("tom")
            public Pet tomcat(){
                return new Pet("tomcat");
            }
        }
        
        
        #############################################Configuration测试示例##################################################
        /**
         * 主程序类
         *
         * @SpringBootApplication:这是一个SpringBoot应用
         * @author: Herz
         * @date: 2021/5/19 9:35
         */
        
        @SpringBootApplication(scanBasePackages = "com.tianfei")
        public class MainApplication {
            public static void main(String[] args) {
                //1、返回IOC容器
                ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class);
                //2、查看容器里面的所有组件
                String[] names = run.getBeanDefinitionNames();
                for (String name : names) {
                    System.out.println(name);
                }
        
                //获取容器里面的组件
                Pet tom01 = run.getBean("tom", Pet.class);
                Pet tom02 = run.getBean("tom", Pet.class);
                System.out.println("组件:" + (tom01 == tom02));
        
                MyConfig bean = run.getBean(MyConfig.class);
                System.out.println(bean);
        
                //如果@Configuration(proxyBeanMethods = true)代理对象调用方法,SpringBoot总会检查这个组件是否在容器中存在
                //保持组件单实例
                User user = bean.user001();
                User user1 = bean.user001();
                System.out.println(user == user1);
        
        
                //测试组件依赖关系与单实例
                User user2 = run.getBean("user001", User.class);
                Pet pet = run.getBean("tom", Pet.class);
                System.out.println(user2.getPet() == pet);
            }
        }

2、@Bean、@Component、@Controller、@Service、@Repository

3、@ComponentScan、@Import

4、@Conditional

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

2.2、原生配置文件引入

1、@ImportResource

2.3、配置绑定(例:绑定properties配置文件与JavaBean对象属性)

1、@Component + @ConfigurationProperties(prefix = "mycar")

​ 注意:这两个注解添加在JavaBean对应的类上

​ prefix :表示前缀,即properties配置文件中属性的前缀

2、@EnableConfigurationProperties(Car.class) + @ConfigurationProperties(prefix = "mycar")

​ 注意:@EnableConfigurationProperties 该注解添加在配置类上,该注解的作用:

​ ①开启Car配置绑定功能

​ ②将Car组件自动注册到容器中

3)、开发小技巧

3.1、Lombok

简化JavaBean开发

引入插件
<dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
</dependency>

3.2、devtools

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

热部署:快捷键 ctrl+F9

3.3、Spring Initializr(项目初始化向导)

项目初始化向导

最后修改:2021 年 06 月 29 日 10 : 05 AM
如果觉得我的文章对你有用,请随意赞赏