[A]自動的にこれらの詳細を設定するには、ソースコードが分からない、あなたはspringbootう言っていません

春に関してのスプリングブーツは、非常に重要な機能が自動設定され、構成が慣例階イデオロギー的な成功よりも大きくなります。箱から出してガイドのシリーズの可能XXX-春ブート・スターター、または(初心者担当者用)、最小限の設定が必要です行っているデフォルトの自動コンフィギュレーションからです。

設定を変更するためのアクセスを提供しながら自動設定は、最初にいくつかの設定を初期化します。

全体の構成
春ブート・自動構成パッケージスプリング・ブート・スターターは、また、一般的に依存して、デフォルトの構成設定の自動設定機能を提供して非常に重要なパッケージです。

依存して
その3-依存パッケージ:

ベースパッケージ:春ブート
オプション機能の依存関係:依存関係は、実際の使用時にユーザが提供する共通のデフォルト設定を提供する
試験パック
オプションの機能に依存するパッケージは、ばねデータのRedis、バリデータを持っている、 thymeleafは、WebSocketのよう。以下は、例として、いくつかを選択し、特定のを説明します。

原理BR /> @ EnableAutoConfiguration
@AutoConfigurationPackage
BR />インポート(AutoConfigurationImportSelector.class)@
公共@interfaceのEnableAutoConfiguration {
/ **

AutoConfigurationImportSelector
自動設定セレクタ、自動設定の選択のタイプ。

selectImportsの
コアの方法:文字列[] selectImports(AnnotationMetadata annotationMetadata )、 この方法は完全なクラス名の配列が自動設定を必要と返します。
クラスは、自動設定は、以下の条件を満たしている必要があります。

META-INFは、/クラスキーがorg.springframework.boot.autoconfigure.EnableAutoConfigurationあるspring.factories
注釈を除外@EnableAutoConfiguration、excludeNameクラス属性表現spring.autoconfigure.excludeクラスコンフィギュレーションセット(存在する場合、クラスパス、ステップ1が、存在しない、例外がスローされる)
条件三の注釈含ま満足OnBeanCondition(例:ConditionalOnBean、ConditionalOnMissingBean)、OnClassCondition(例:ConditionalOnClass、ConditionalOnMissingClass)、OnWebApplicationCondition(例:ConditionalOnWebApplication、ConditionalOnNotWebApplication)
最後に、活性化されたAutoConfigurationImportEventをイベント。

getImportGroup DeferredImportSelector.Groupと
異なるグループ化ImportSelectorからの結果

自動コンフィギュレーションシーケンスBR /> AutoConfigurationSorter
@AutoConfigureOrder
@AutoConfigureBefore
BR /> AutoConfigureAfter @
AutoConfigurationSorter特定の制御シーケンスロジック
@AutoConfigureOrderは、特定のバリアント@Orderの自動設定されたときに、カスタム設定シーケンスの開発を使用することができます必要! AutoConfigureOrder。絶対構成制御シーケンシャルアプリケーションクラス。
相対的な順序と@AutoConfigureAfter @AutoConfigureBefore制御アプリケーション構成クラス。

具体的なトレーニング・シーケンスは次のよう:

アルファベット昇順でクラス名に従って
@AutoConfigureOrder値の値に応じて(デフォルト:0)昇順に
ソート@AutoConfigureBeforeと@AutoConfigureAfter調整に応じ
@Orderが自動的にそれのように構成された順序を制御できるように?

@SpringBootApplicationの
2.1.8.RELEASEバージョン、メモノートのこの組み合わせは以下の通り:

//心配せずに注釈を省略> @ SpringBootConfiguration / BR
@EnableAutoConfiguration
@ComponentScan(excludeFilters @Filter = {(タイプ= FilterType.CUSTOM、クラス= TypeExcludeFilter.class)、
@Filter(タイプ= FilterType.CUSTOM、= AutoConfigurationExcludeFilterクラス。クラス)})
パブリック@interfaceのSpringBootApplication {
前元@Configuration @SpringBootConfigurationに、次のようにそれらの意味は次のとおりです。

@Configurationクラスは同等である
注釈付きクラスを使用して春ブートアプリケーションを提供します。
アプリケーションは、通常@SpringBootApplicationそれ一つだけ@SpringBootConfigurationクラスを含めることができ
AbstractDependsOnBeanFactoryPostProcessor
クラスは、スプリング・ブートブートプロセスを中に適切なタイミングで実行されます、BeanFactoryPostProcessorを実装して
、このような動的な決定はコンストラクタによって豆の種類を指定する必要があります継承しますどのような豆に依存しています。

BackgroundPreinitializerの
クラスはApplicationListener <SpringApplicationEvent>実装
:トリガーのようなバックグラウンドスレッド時間のかかる作業で、早期の初期化、:などの機能を
などValidationInitializer、MessageConverterInitializer、JacksonInitializer、CharsetInitializer、ConversionServiceInitializer、MBeanFactoryInitializerを

@ImportAutoConfiguration
自動的にコンフィギュレーション・クラスをインポートしました。ビューのソース点から、自動的にテスト時間を設定するために使用されます。例えばそのような注釈、また、META-INF / spring.factories構成の使用:

@ImportAutoConfiguration
public @interface AutoConfigureDataJpa {}
org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureDataJpa=\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
因此使用注解 AutoConfigureDataJpa 就相当于导入了 JpaRepositoriesAutoConfiguration
```、
DataSourceAutoConfiguration 等类。

使用如下:

@BootstrapWith(DataJpaTestContextBootstrapper.class)BR /> @ ExtendWith(SpringExtension.class)
@OverrideAutoConfiguration(偽=有効)
BR /> TypeExcludeFilters(DataJpaTypeExcludeFilter.class)@
@Transactional
BR /> @ AutoConfigureCache
@AutoConfigureDataJpa
BR /> @ AutoConfigureTestDatabase
@AutoConfigureTestEntityManager
BR /> @ ImportAutoConfiguration
公共@interface DataJpaTest {
// ...
BR />}
@RunWith(SpringRunner.class)
@DataJpaTest
@TestPropertySource(プロパティ=「spring.jpa.hibernate.use新しい-ID-発電マッピング=偽")
パブリッククラスDataJpaTestIntegrationTests {

@Autowired
private TestEntityManager entities;

@Autowired
private JdbcTemplate jdbcTemplate;

@Autowired
private ExampleRepository repository;

@Autowired
private DataSource dataSource;

@Autowired
private ApplicationContext applicationContext;

@Test
public void testEntityManager() {
    ExampleEntity entity = this.entities.persist(new ExampleEntity("spring", "123"));
    this.entities.flush();
    Object id = this.entities.getId(entity);
    ExampleEntity found = this.entities.find(ExampleEntity.class, id);
    assertThat(found.getName()).isEqualTo("spring");
}

// ...
对常用工具的支持
以上原理是提供自动配置的基石,但实际在使用的时候,很多内容不需要任何(或极少量)配置就能直接使用,一方面是各 xxx-spring-boot-starter 中包含了 spring-boot-autoconfigure 并写了自动配置逻辑,一方面,是 spring-boot 官方在 spring-boot-autoconfigure 包中已经直接支持了。
spring-boot 对常用工具的支持
spring-boot 对常用数据源的支持

示例:gson 自动配置
支持有如下类:

GsonProperties
GsonBuilderCustomizer
GsonAutoConfiguration
構成プロパティGsonを取得するためにGsonPropertiesクラス

@ConfigurationProperties(接頭辞= "spring.gson")
パブリッククラスGsonProperties {
プライベートブールgenerateNonExecutableJson。
プライベートブールexcludeFieldsWithoutExposeAnnotation。
プライベートブールserializeNulls。
プライベート文字列DATEFORMAT。
// ...
BR />}
@FunctionalInterface
パブリックインターフェイスGsonBuilderCustomizer {
/ **

  • カスタムGsonBuilder
    * /
    ボイドカスタマイズ(GsonBuilder gsonBuilder);
    }
    GsonAutoConfigurationはGsonPropertiesを使用し、GsonBuilderCustomizer(インナークラスの実装)

@Configuration BR /> ConditionalOnClass @(Gson.class)
@EnableConfigurationProperties(GsonProperties.class)
パブリッククラスGsonAutoConfiguration {
BR />ビーン@
@ConditionalOnMissingBean
公共GsonBuilder gsonBuilder(一覧<GsonBuilderCustomizer>カスタマイザ){
GsonBuilderビルダー=新しいGsonBuilder()。
customizers.forEach((C) - > c.customize(ビルダー));
ビルダーを返します。
}

@Bean
@ConditionalOnMissingBean
public Gson gson(GsonBuilder gsonBuilder) {
    return gsonBuilder.create();
}

@Bean
public StandardGsonBuilderCustomizer standardGsonBuilderCustomizer(GsonProperties gsonProperties) {
    return new StandardGsonBuilderCustomizer(gsonProperties);
}

static final class StandardGsonBuilderCustomizer implements GsonBuilderCustomizer, Ordered {

    private final GsonProperties properties;

    StandardGsonBuilderCustomizer(GsonProperties properties) {
        this.properties = properties;
    }

    @Override
    public int getOrder() {
        return 0;
    }

    @Override
    public void customize(GsonBuilder builder) {
     // ...
    }

おすすめ

転載: blog.51cto.com/14207399/2443606