SpringBoot コアの構成と注釈

目次

1. 注意事項

メタアノテーション

基本的な注釈

コメントを開始

2、構成

フォーマットの紹介

設定ファイル情報の読み取り

ケースデモ1

 ネストされた読み取り Bean 情報

ケースデモ2

 マップ、リスト、配列タイプの構成データの読み取り

ケースデモ3

 3. まとめ


1. 注意事項

        SpringBoot の基本と AOP の簡単なアプリケーションについて学ぶ前に、この号では SpringBoot のコア構成とアノテーションについて説明します。 

        SpringBoot アノテーションは、コードにラベルを付ける機能です。アノテーションを導入することで、簡単かつ迅速にコードに命を吹き込むことができ、コードの可読性と拡張性が大幅に向上します。アノテーション自体には機能はなく、単なるラベルですが、さまざまなラベルを定義し、さまざまなラベル プロセッサを実装して、関数を拡張し、関数を有効にし、属性を定義し、動作を定義し、クラス、メソッド、属性などのルールを定義することができます。パラメータ、関連付け処理、メタデータ定義など。

メタアノテーション

@Documented : 注釈は、この注釈によって注釈が付けられた要素の javadoc ドキュメントにリストされます。一般に、この注釈をマークしても問題はありません

@目標

        アノテーションを適用できる対象要素(クラス、メソッド、属性、パラメータなど)は慎重に検討する必要があります。

@保持

        ソース コードのみを保持するか、コンパイルされたバイトコードが完成するまで保持するか、実行時にロードします。アプリケーションの 90% 以上が実行時に追加処理のために注釈を解析するため、ほとんどの場合、構成を RetentionPolicy .RUNTIME に設定します。

@遺伝性の

        サブクラスがアノテーションを定義していない場合、親クラスから継承属性を定義するアノテーションを自動的に取得できます。たとえば、Spring の @Service には継承特性がありませんが、@Transactional には継承特性があります。Spring アノテーションは OO 継承システムで使用されます。アノテーションはサブクラスに継承できるのが当たり前なので、無用なバグが発生する可能性がありますので、継承を有効にするかどうかは慎重に検討する必要があります。

@Repeatable

        Java 8 で導入された機能は、関連付けられたアノテーション コンテナを通じて反復可能なアノテーションを定義します。少しの構文糖衣により、コードの可読性が向上します。要素に対して複数の反復アノテーションを持つことは、実際には非常に一般的です。たとえば、メソッドにはロールによってアクセスできます。特定のメソッドはスケジュールされたタスクとして実行する必要があり、B 条件だけでなく A 条件でも実行する必要があります。

@ネイティブ

        .h ヘッダー ファイルにマークされたフィールドを生成するかどうか。ネイティブ プログラムが Java プログラムと対話する必要がない限り、このメタ アノテーションはほとんど使用されません。

基本的な注釈

@Service : クラスにアノテーションが付けられ、これがビジネス層 Bean であることを示します

@Controller : クラスにアノテーションが付けられ、これが制御層 Bean であることを示します

@Repository : クラスにアノテーションが付けられ、これがデータ アクセス層 Bean であることを示します

@Component : アノテーションはクラス上にあり、一般的な Bean を示します。値が書き込まれない場合、デフォルトではクラス名の最初の文字が小文字になります。

@Autowired : タイプによって注入。デフォルト属性 required=tru

@Resource:名前によってアセンブルされます。

コメントを開始

 SpringBootアプリケーション

次の 3 つの注釈を含めます。

 @SpringBootConfiguration

          @Configuration: 構成クラスである JavaConfig の機能を @Bean と組み合わせると、オブジェクトを Spring IOC コンテナーに挿入できます。@SpringBootConfiguration アノテーションが付けられたクラスは構成クラスです。

@EnableAutoConfiguration

         自動構成をオンにします。Spring およびサードパーティのライブラリでオブジェクトを作成し、xml の記述を避けるためにそれらを Spring コンテナーに挿入し、サンプル コードを削除します。フレームワークによって提供される、使用されるオブジェクト。

 @ComponentScan 

         コンポーネント スキャナー、<context:component-scan base-package="xxx package"/> は、@Controller、@Service、@Repository、@Component アノテーションをスキャンし、それらのオブジェクトを作成してコンテナーに挿入します。

Springboot の規則: スキャン パッケージのルート (開始点) としてのスタートアップ クラス


2、構成

フォーマットの紹介

設定ファイルには、プロパティと  yaml ( yml )の2 つの形式があります。

        property は Java で一般的に使用される構成ファイル形式であり、ファイル拡張子は property です。

構文形式は、キー=値です。キーはユニークです。

        yaml (Yet Another Markup Language) は構成ファイルのデータ形式であり、ファイル拡張子は yaml または yml (一般的に使用されます) です。

構文形式は、キー:[スペース] 値です。


YAML の基本的な構文規則:

 大文字と小文字を区別する

 インデントを使用して階層関係を表現する

 インデントに使用できるのはスペースのみです。タブキーは使用できません。

 同じレベルの要素が左揃えである限り、インデントのスペースの数は重要ではありません。

 # 文字はコメントを表し、単一行のコメントのみをサポートします。# コメント行の最初の文字を入れます

YAML インデントではスペースを使用する必要があり、大文字と小文字が区別されます。YAML ファイルを作成するときは、小文字とスペースのみを使用することをお勧めします。

YAML は 3 つのデータ構造をサポートします

 オブジェクト: キーと値のペアのコレクション。マッピング (マッピング) / ハッシュ (ハッシュ) / 辞書 (辞書) とも呼ばれます。

 配列:順番に並べられた値の集合。シーケンス(sequence)/リスト(list)とも呼ばれます。

 スカラー: 数値、文字列、true|false などの単一の割り切れない値。

保存パス: src/main/resource ディレクトリまたはクラスパスの /config

設定ファイル情報の読み取り

Spring Boot は、プロパティyml形式        の両方の構成ファイルをサポートします   。デフォルトでは、構成ファイル名は application です。application.properties  、  application.ymlを使用できます

設定ファイルのキー値を読み込み、@ValueでBeanのプロパティを注入し、@Valueでキーの値を一度に注入します。

複数のキー値をBeanの複数のプロパティにバインドすると、ConfigurationProperties アノテーションと連携できます。 

コード内のプロパティにアクセスする場合、外部化された構成に抽象オブジェクトの環境を使用することもできます。Environment を使用してこのオブジェクトを挿入し、その getProperty(String key) メソッドを呼び出します。

ケースデモ1

        要件: application.properties にアプリケーションの名前、所有者、およびポートの基本情報を指定すると、プログラムはこれらのデータを読み取り、ユーザーに表示します。

        ステップ 1: 依存関係を追加せずに新しい Maven プロジェクトを作成する

        ステップ 2: application.properties の構成項目をカスタマイズする

        ステップ 3: app.name、app.owner、app.port 構成キーを読み取るための SomeService クラスを作成します。       

        注釈 @Value は単一の値を読み取ります。構文 ${key: デフォルト値}

     

@Service
public class SomeService {
    @Value("${app.name}")
    private String name;

    @Value("${app.owner}")
    private String owner;

    @Value("${app.port:8088}")
    private Integer prot;

    public void printValue(){
        //链接字符串
        StringJoiner joiner = new StringJoiner(";");
        joiner.add(name).add(owner).add(String.valueOf(prot));

        //打印出字符串
        String result = joiner.toString();
        System.out.println("result= "+ result);
    }

         ステップ 4: 単体テスト

        テスト ディレクトリにテスト クラスを作成し、SomeService オブジェクトを挿入して、その printValue() メソッドを呼び出します。


 ネストされた読み取り Bean 情報

ケースデモ2

        要件: Bean には属性として他の Bean が含まれており、構成ファイル内の構成項目は Bean および参照型のメンバーにバインドされています。Bean 定義には特別な要件はありません。

        ステップ 1: .yml サフィックスを持つ新しいファイルをリソースフォルダーの下に作成し、依存関係を追加します。

       次の依存関係を pom.xml ファイルに追加します。  

<dependency> 
    <groupId>org.projectlombok</groupId> 
    <artifactId>lombok</artifactId> 
    <optional>true</optional> 
</dependency> 

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

ステップ 2: 新しい pk02 パッケージを作成し、2 つのクラスを作成する

//DoubBean 
@Configuration(proxyBeanMethods = false)
@ConfigurationProperties(prefix = "app1")
@Service
public class DoubBean {
    private String name;
    private String owner;

    private Integer port;
    private Seri ser;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getOwner() {
        return owner;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }


    public Seri getSer() {
        return ser;
    }

    public void setSer(Seri ser) {
        this.ser = ser;
    }

    @Override
    public String toString(){
        return "DoubBean{ \n"+
                "网站名="+name+"\n" +
                ",浏览器cookic="+owner+"\n" +
                ",端口="+port+"\n" +
                "用户信息:"+ser+
                "}";
    }
// Seri 
public class Seri {
    private String username;
    private String userpass;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUserpass() {
        return userpass;
    }

    public void setUserpass(String userpass) {
        this.userpass = userpass;
    }

    @Override
    public String toString(){
        return "用户名:" + username +"  用户密码:" + userpass;
    }
    
}

         ステップ 3: スキャン パッケージと単体テスト メソッドを追加する

必ず最初にスキャン アノテーションをスタートアップ クラスに追加し、スキャンされたパッケージをセットアップしてください。


 マップ、リスト、配列タイプの構成データの読み取り

ケースデモ3

Map、List、Array はすべて構成データを提供できます。以下に、構成例を使用してプロセスを示します。

        ステップ 1: 今すぐ application.yml ファイルにさまざまなタイプのデータを書き込みます

        ステップ 2: pk3 パッケージを追加し、次のクラス ファイルを作成します。

//Users 
public class Users {
    private String name;
    private String sex;
    private Integer age;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString(){
        return "MyServer{ " +
                "name: " + name +"\n"+
                "sex: " + sex +"\n" +
                "age= "+age+"  }"+"\n";


    }
}
//ConutClass 
@Data
@ConfigurationProperties
public class ConutClass {
    private List<Servers> servers;
    private Map<String,Users> users;

    private String [] names;

    @Override
    public String toString(){
        return "ConutClass{ \n"+
                "网站服务器:"+"\n"+servers+"\n" +
                "用户信息列表:"+"\n"+users+"\n" +
                "名字列:"+"\n"+names+"\n" +
                "}";
    }
}
//Servers 
public class Servers {
    private String title;
    private String ip;
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    @Override
    public String toString(){
        return "MyServer{ " +
                "title: " + title +"\n"+
                "ip: " + ip + "  }"+"\n";
        
    }
}

        ステップ 4: スキャン パッケージとテスト ユニットを追加する

@ConfigurationPropertiesScan アノテーションは 1 回だけ追加できるため、複数のスキャン パッケージを中括弧で囲み、カンマで区切って保存できます。

 3. まとめ

この記事では、一般的なアノテーションと Bean の読み取りとテストに焦点を当てます。

        Spring Boot は アプリケーションの構成を管理するためにapplication.properties または ファイルを使用しますapplication.yml 

   @SpringBootApplication@Configurationアノテーションは、と@EnableAutoConfigurationの機能を組み合わせた Spring Boot アプリケーションのスタートアップ クラスを開始するために使用されます@ComponentScan@RestController注釈はクラスを RESTful API のコントローラーとしてマークし、@RequestMappingHTTP リクエストをコントローラー メソッドにマップするために使用されます。

        さらに、依存関係@Autowiredを自動的に注入できる依存関係注入のアノテーション。最後の@Beanアノテーションは、メソッドによって返されたインスタンスを Bean として登録し、Spring のアプリケーション コンテキストに追加できます。

この記事の内容はこれで終わりです。良い提案や不十分な点がある場合は、コメント エリアで「いいね!」を押して転送してください。

おすすめ

転載: blog.csdn.net/qq_51294997/article/details/132112903