Springboot の使用について話す

1.スプリングブート構成

JDKバージョンの確認を増やすには1.0 Maven構成が最適です

<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>

1.1 では、pom に springboot ファイル構成が導入されています。

<groupId>org.example</groupId>
<artifactId>www-ES-Api</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<!-- 依赖管理 -->
<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.3.5.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
<!-- 几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制. -->
<!--org.springframework.boot的父项目包-->
<parent>
    <groupId>org.springframework. boot</ groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

スターターシーンランチャー

<!-- 
1、见到很多spring-boot-starter-* :*就某种场景
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3、SpringBoot所有支持的场景
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot 
4、见到的 *-spring-boot-starter:第三方为我们提供的简化开发的场景启动器。

版本控制:
1、引入依赖默认都可以不写版本
2、引入非版本仲裁的jar,要写版本别

2. springboot以外の依存バージョンの設定

    <properties>
        <!--版本设置-->
        <mysql.version>5.1.30</mysql.version>
    </properties>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
	</dependencies>

2.1 自動構成

  • 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 開発のすべての一般的なシナリオの構成に役立ちます
  • デフォルトのパッケージ構造

    1. デフォルトでは、メイン プログラムが配置されているパッケージ内のコンポーネントとその下のすべてのサブパッケージがスキャンされます。

    2. 事前のパケット スキャン設定は必要ありません

    3. スキャンパスを変更するには、@SpringBootApplication(scanBasePackages="com.atguigu") または

      @ComponentScan はスキャン パスを指定します

        @SpringBootApplication  等同于
        @SpringBootConfiguration
        @EnableAutoConfiguration
        @ComponentScan("com.atguigu.boot"")
      
  • さまざまな構成にはデフォルト値があります

    1. デフォルト構成は最終的に MultipartProperties にマップされます。
    2. 構成ファイルの値は最終的に各クラスにバインドされ、このクラスはコンテナー内にオブジェクトを作成します。
  • すべての自動構成アイテムをオンデマンドでロードします

    • たくさんの前菜
    • どのシナリオが導入されると、このシナリオの自動構成が有効になります
    • SpringBoot のすべての自動構成機能は spring-boot-autoconfigure パッケージに含まれています
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
  </dependency>
</dependencies>

3. 使用する

  • メインプログラムエントリー

    package com.toec.boot;
    
    import com.toec.boot.bean.Pet;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ConfigurableApplicationContext;
    
    /**
     * @Package: com.toec.boot
     * @ClassName: MainApplication
     * @Description:  springboot初始化,主类设置
     * @Date: 1/9/2022 3:19 PM
     * @Version: 1.0
     */
    @SpringBootApplication(scanBasePackages="com.toec")
    public class MainApplication {
          
          
        public static void main(String[] args) {
          
          
            // 1、返回我们IoC容器
            ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
            //2、查看容器里面的组件
            String[] beanDefinitionNames = run.getBeanDefinitionNames();
            for (String name:beanDefinitionNames){
          
          
                System.out.println(name);
            }
            // 3、从容器中获取组件
            Pet tom = run.getBean("tom",Pet.class);
            Pet tom1 = run.getBean("tom",Pet.class);
            // Pet tom2 = run.getBean("tom",Pet.class);
            System.out.println("组件:"+(tom==tom1));
        }
    }
    
  • コントロールプレーンインターフェース

    package com.toec.boot.controller;
    
    import com.toec.boot.vo.DeviceVo;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    /**
     * @Package: com.toec.boot.controller
     * @ClassName: HelloController
     * @Description: 请求接口
     * @Date: 1/9/2022 3:23 PM
     * @Version: 1.0
     */
    //@ResponseBody
    //@Controller
    @RestController
    public class HelloController {
          
          
        @RequestMapping("/hello")
        public String Handler(){
          
          
            return "Hello,Spring boot";
        }
    
        @GetMapping("getHello")
        public String HandlerGet(){
          
          
            return "Hello,Spring boot,get";
        }
    
        @PostMapping("/postHello")
        public String HandlerPost(DeviceVo deviceVo){
          
          
            String msg = deviceVo.getDeviceId();
            System.out.println(msg);
            return "hello,Spring boot , post,"+msg;
        }
    }
    
    
  • Bean エンティティ

    package com.toec.boot.bean;
    
    /**
     * @Package: com.toec.boot.bean
     * @ClassName: Pet
     * @Description: 宠物
     * @Date: 1/9/2022 10:04 PM
     * @Version: 1.0
     */
    public class Pet {
          
          
        private String name;
    
        public Pet() {
          
          
        }
    
        public Pet(String name) {
          
          
            this.name = name;
        }
    
        public String getName() {
          
          
            return name;
        }
    
        public void setName(String name) {
          
          
            this.name = name;
        }
    
        @Override
        public String toString() {
          
          
            return "Pet{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    
    package com.toec.boot.bean;
    
    /**
     * @Package: com.toec.boot.bean
     * @ClassName: User
     * @Description: 用户
     * @Date: 1/9/2022 10:05 PM
     * @Version: 1.0
     */
    public class User {
          
          
        private String name;
        private int age;
    
        public User(String name, int age) {
          
          
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
          
          
            return name;
        }
    
        public void setName(String name) {
          
          
            this.name = name;
        }
    
        public int getAge() {
          
          
            return age;
        }
    
        public void setAge(int age) {
          
          
            this.age = age;
        }
    
        @Override
        public String toString() {
          
          
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
  • Bean の構成

    1. @Configuration の基本的な使用法

    2. 構成クラスでは、@Bean アノテーションを使用してメソッド上のコンテナーのコンポーネントを登録します。これもデフォルトでは単一インスタンスです。

    3. 構成クラス自体もコンポーネントです

    4. @Import({User.class, DBHelper.class}) //完全なクラス名コンポーネントをインポートできます。デフォルトのコンポーネント名は完全なクラス名です。

    5. proxyBeanMethods: プロキシ Bean メソッド

      • Full(proxyBeanMethods = true), [各 @Bean メソッドが何回呼び出され、返されるコンポーネントが単一のインスタンスであるかを保証します]
      • Lite(proxyBeanMethods = false)【各 @Bean メソッドが何回呼び出されるか、返されるコンポーネントは新しく作成されます】
      • コンポーネントの依存関係では、デフォルトで完全モードを使用する必要があります。もう一方がデフォルトでライトモードであるかどうか
    package com.toec.boot.config;
    
    import com.toec.boot.bean.Pet;
    import com.toec.boot.bean.User;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @Package: com.toec.boot.config
     * @ClassName: Config
     * @Description: bean配置
     * @Date: 1/9/2022 10:07 PM
     * @Version: 1.0
     * 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
     * 2、配置类本身也是组件
     * 3、Configuration中属性proxyBeanMethods :代理bean的方法
     * 若配置为true,外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
     * //如果@Configuration(proxyBeanMethods = true )代理对象调用方法。
     * SpringBoot总会检查这个组件是否在注册容器中的单实例对象
     * 保持组件单实例
     */
    @Import({
          
          User.class, DBHelper.class}) //可以导入全类名组件,可以不用
    @Configuration(proxyBeanMethods = false)  //告诉SpringBoot这是一个配置类==配置文件
    public class MyConfig {
          
          
        @Bean
        public User user(){
          
          
            return new User("toec",20);
        }
        @Bean("tom")
        public Pet pet(){
          
          
            return new Pet("dog");
        }
    }
    
  • 設定ファイル

    server.port=8088
    spring.servlet.multipart.max-file-size=10000MB
    spring.datasource.url = jdbc:mysql://localhost:3306/test?setUnicode=true&characterEncoding=utf8
    spring.datasource.username=root
    spring.datasource.password=1234
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    

おすすめ

転載: blog.csdn.net/weixin_45717907/article/details/122402134