著者:1819ドリーム
:オリジナルhttps://blog.csdn.net/weixin_39759846/article/details/93032658
著作権:この記事はブロガーのオリジナルの記事、再現され、ボーエンのリンクを添付してください!
序文
このプロジェクトの作業を完了するためにいくつかの時間を、その家族のブログは以前のように頻繁に更新されていないが、理解を願っています。
それらを使用して簡単SpringBoot、主流のJavaの統合フレームワークがデフォルト。また、大きな特徴のSpringBoot、使いやすい、任意のフレームワークや技術を必要としている、唯一のスターターをすることができ、対応する導入する必要があります。現在の公式は、あなたが見ることができ、主要な技術的なスターターを統合した 文書を。
ほとんどの著者は、トピックが一度顔の質問だっ考えるようになりました:カスタムランチャーをカスタマイズする方法?
この記事では、面接の質問について説明します。
カスタムスターター
カスタムスターターの前に、のはSpringBoot当局はスターターが統合されている確認しましょう。我々は単に対応する導入、使用するとき spring-boot-starter-xxx
に使用する(つまり、私たちはしばしば、箱から出して言います)。
デフォルト値を変更する必要がある場合一方、また、事前に設定されたデフォルト値、だけ変更またはapplication.ymlプロファイルをapplication.propertiesする必要があります。たとえば:あなただけapplication.propertiesに属性を追加し、ポート番号を変更する必要がある場合SpringBootデフォルトのポート番号は、8080です server.port=9090
することができます。
カスタムランチャーを作成し、次の2つのコンポーネントを作成する必要があります。
- 自動コンフィギュレーションクラスと属性クラスのカスタム設定。
- Mavenは依存対応します。
まず、カスタムスタータープロジェクトを作成し、依存導入達人:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.0.0.RELEASE</version>
<optional>true</optional>
</dependency>
その後、エンティティクラスを作成します。プレフィックスプラスフィールドの名前は、プロパティapplication.propertiesファイルの名前で作成することができます。
package com.yanfei1819.springbootstarter.entity;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* Created by 追梦1819 on 2019-05-10.
*/
@ConfigurationProperties(prefix = "spring.person")
public class PersonProperties {
private String name;
private int age;
private double salary;
// set/get 省略
}
第3のステップは、主にスタータのコア機能を定義するコアサービスクラスの定義です。
package com.yanfei1819.springbootstarter.service;
import com.yanfei1819.springbootstarter.entity.PersonProperties;
/**
* Created by 追梦1819 on 2019-05-10.
*/
public class PersonService {
private PersonProperties properties;
public PersonService(PersonProperties properties) {
this.properties = properties;
}
public PersonService() {
}
public void say() {
System.out.println("hello,I am " + properties.getName() + ",and I am " + properties.getAge() +
",and My salary " + properties.getSalary());
}
}
第四ステップ、カスタム構成クラス。それぞれのスターターは、通常、少なくとも1つのクラスの構成を有しています。ネーミングは、一般的な命名規則がように例のRedisAutoConfigurationため、XxxAutoConfigurationを使用して、また非常に明白です。そのような機能は、コアSpringBootコンテキストに注入されます。
package com.yanfei1819.springbootstarter.configuration;
import com.yanfei1819.springbootstarter.entity.PersonProperties;
import com.yanfei1819.springbootstarter.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by 追梦1819 on 2019-05-10.
*/
@Configuration
@EnableConfigurationProperties(PersonProperties.class)
@ConditionalOnClass(PersonService.class)
@ConditionalOnProperty(prefix = "spring.person", value = "enabled", matchIfMissing = true)
public class PersonServiceAutoConfiguration {
@Autowired
private PersonProperties properties;
@Bean
@ConditionalOnMissingBean(PersonService.class) // 当容器中没有指定Bean的情况下,自动配置PersonService类
public PersonService personService() {
PersonService personService = new PersonService(properties);
return personService;
}
}
最後に、spring.factoriesファイルを作成します。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yanfei1819.springbootstarter.configuration.PersonServiceAutoConfiguration
SpringBootが起動したら、それはクラスパスに見えます spring.factories ファイル、この条件は、初期化@ConditionalOnClassコメントで有効になっています。このファイルには、実行中の異なる構成クラスを尽くす春ブーツに名前をマップします。したがって、この断片によると、春ブーツはRabbitMQの、カサンドラ、MongoDBのと休止状態を実行するすべての設定クラスを試してみてください。
主な特徴は、瓶のパッケージをスキャンするSpringFactoriesLoader.loadFactoryNames @EnableAutoConfiguration方法の使用はMETA-INF / spring.factoriesファイルを持って有効にするので、私達の自動化されたコンフィギュレーション・クラスであるので、我々は、リソースの自動構成モジュールにMETA-INF /春を作成します。工場のドキュメント。
カスタムスターターを使用します
新しいプロジェクト、自立の達人定義されたスターターの導入を作成します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.yanfei1819</groupId>
<artifactId>customize-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
ここでは、命名規則に注意を払う必要があり、名前の公式はspring-boot-starter-xxx
、カスタムの名前 xxx-spring-boot-starter
。
次に、設定ファイルの書き込みテストデータ:
spring.person.name=starter
spring.person.age=26
のは、簡単なテストであることを、スタートアップの種類を変更してみましょう:
package com.yanfei1819.customizestartertest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class CustomizeStarterTestApplication implements CommandLineRunner {
@Value("${spring.person.name}")
private String name;
@Value("${spring.person.age}")
private int age;
public static void main(String[] args) {
SpringApplication.run(CustomizeStarterTestApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
System.out.println("姓名是:"+name+",年龄是:"+age);
}
}
上記開始CommandLineRunnerクラスがインタフェースを実装し、runメソッドをオーバーライドします。ばねブートCommandLineRunner
インタフェースは、主にロジックを実行する初期化、コードブロック後にアプリケーションのために使用され、この初期化コードは、アプリケーション全体のライフサイクルに一度実行されます。(インターフェースの効果を参照することができる記述公式サイト)。
ここに書かれたテストは、このインタフェースを実装するクラスを節約するためにあります。
最後に、プロジェクトを開始するには、次のような結果を見ることができます:
概要
上記の分析および実施例に基づいて、おおよそワークフロースターターを総括することができます。
-
SpringBootが起動したときにspring.factoriesを含むJARファイルを探し、
-
Spring.factoriesは、自動設定の自動構成の設定のためのクラスファイルを読み込みます。
-
自動コンフィギュレーションクラス(@ConditionalOnXxx)は@Bean Springootコンテキストに置かれる条件を満足します。
-
直接開発。
感情
SpringBootカスタムランチャーは大幅構成作業の多くを排除し、独立した機能瓶の発展を促進します。
Yihuhuhuapiaoは、スターターは、それは実際には非常に簡単です、カスタムを書き、それにはいくつかの注意事項に注意を払います。しかし、私たちは本当に実行する必要があり、自動的に、知っている、原理は魂で、原則を設定する理由を知っているので、カスタムスターターが便利になります行くことによって、ソースコードを理解することです。私たちは、自動的にSpringBootを設定する共有の原則に従うことを継続します。