春に関してのスプリングブーツは、非常に重要な機能が自動設定され、構成が慣例階イデオロギー的な成功よりも大きくなります。箱から出してガイドのシリーズの可能XXX-春ブート・スターター、または(初心者担当者用)、最小限の設定が必要です行っているデフォルトの自動コンフィギュレーションからです。
設定を変更するためのアクセスを提供しながら自動設定は、最初にいくつかの設定を初期化します。
全体の構造
spring-boot-autoconfigure
パッケージは、spring-boot-starter
非常に重要な自動設定機能を提供し、パッケージも、一般的に依存して、デフォルトの設定セット。
頼ります
これは、3つのパッケージに依存します。
- ベースパッケージ:春ブーツ
- オプション機能の依存関係:実際に使用する際の依存性は、ユーザーが提供する共通のデフォルト設定を提供します
- テストパッケージ
オプション機能の依存関係は、ばねデータのRedis、バリ、thymeleaf、同様のWebSocketを持っています。以下は、例として、いくつかを選択し、特定のを説明します。
原則
@EnableAutoConfiguration
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
/**
* 当此名对应属性为 true 时,才开启自动配置
*/
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
/**
* 需要排除的类(通常当此类在类路径下时使用)
*/
Class<?>[] exclude() default {};
/**
* 需要排除的类名(当此类不在类路径下时使用)
*/
String[] excludeName() default {};
}
@AutoConfigurationPackage
注釈このタイプのパケットを使用すると、登録された春のBeanに属します。
beanNameのこの春のBeanはAutoConfigurationPackages、ある
BasePackagesにたbeanClass。
AutoConfigurationImportSelector
自動構成選択のセレクタ自動設定、どのようなタイプ。
selectImports
コアの方法:String[] selectImports(AnnotationMetadata annotationMetadata)
この方法で自動的に設定される完全なクラス名の配列を返します。
クラスは、自動設定は、以下の条件を満たしている必要があります。
- META-INF / spring.factoriesキーである
org.springframework.boot.autoconfigure.EnableAutoConfiguration
クラス - 注釈を除外@EnableAutoConfiguration、excludeNameクラス属性はspring.autoconfigure.excludeクラスコンフィギュレーションセットを表現(存在する場合クラスパスが、ステップ1に存在しない場合、例外がスロー)
- 条件を満たした3つの注釈が含まれています
OnBeanCondition
(例:ConditionalOnBean、ConditionalOnMissingBean)、OnClassCondition
(例えば:ConditionalOnClass、ConditionalOnMissingClass)、OnWebApplicationCondition
(例えば:ConditionalOnWebApplication、ConditionalOnNotWebApplication)
最後に、それがアクティブになりAutoConfigurationImportEvent
、イベントを。
getImportGroupとDeferredImportSelector.Group
異なるグループ化ImportSelectorからの結果
自動コンフィギュレーションシーケンス
- AutoConfigurationSorter
- @AutoConfigureOrder
- @AutoConfigureBefore
- @AutoConfigureAfter
AutoConfigurationSorter
具体的なシーケンス制御ロジックが
@AutoConfigureOrder
あり@Order
、カスタム設定順序を使用することができます開発する必要がある、特定のバリアント自動設定で@AutoConfigureOrder
。クラス制御アプリケーション構成绝对顺序
。
@AutoConfigureBefore
そして、@AutoConfigureAfter
シーケンシャルアプリケーションクラスの相対的な構成を制御します。
具体的なトレーニング・シーケンスは次のよう:
- クラス名による
字母表递增
ソート @AutoConfigureOrder
値(デフォルト:0)递增
並び替え- よる
@AutoConfigureBefore
と、@AutoConfigureAfter
順序を調整します
あなたは@Order
、自動的にそれのように構成された順序を制御することができますか?
@SpringBootApplication
2.1.8.RELEASE
次のようにバージョンは、ノートのこの組み合わせは、ノート:
// 省略不需关心的注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
元はされてきた@Configuration
変更@SpringBootConfiguration
は次のようにその意味は、:
- 同等クラス@Configuration
- 注釈クラスが春ブートアプリケーションを提供して使用してください。
アプリケーションが一つだけ@SpringBootConfigurationクラスを含めることができ、それは通常@SpringBootApplication
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)
@ExtendWith(SpringExtension.class)
@OverrideAutoConfiguration(enabled = false)
@TypeExcludeFilters(DataJpaTypeExcludeFilter.class)
@Transactional
@AutoConfigureCache
@AutoConfigureDataJpa
@AutoConfigureTestDatabase
@AutoConfigureTestEntityManager
@ImportAutoConfiguration
public @interface DataJpaTest {
// ...
}
@RunWith(SpringRunner.class)
@DataJpaTest
@TestPropertySource(properties = "spring.jpa.hibernate.use-new-id-generator-mappings=false")
public class 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-ばねブートスタータスプリングboot-を含有する上記提供自動設定の礎石であるが、自動設定と自動コンフィギュレーションロジックを書いて、一方では、春・ブート・自動構成パッケージの春ブート公式直接サポートしています。
例:gson自動設定
次のカテゴリをサポートしています:
- GsonProperties
- GsonBuilderCustomizer
- GsonAutoConfiguration
GsonProperties
クラスゲットGson
構成プロパティを
@ConfigurationProperties(prefix = "spring.gson")
public class GsonProperties {
private Boolean generateNonExecutableJson;
private Boolean excludeFieldsWithoutExposeAnnotation;
private Boolean serializeNulls;
private String dateFormat;
// ...
}
@FunctionalInterface
public interface GsonBuilderCustomizer {
/**
* 自定义 GsonBuilder
*/
void customize(GsonBuilder gsonBuilder);
}
GsonAutoConfiguration
GsonPropertiesとGsonBuilderCustomizer(内部クラス)を使用して、
@Configuration
@ConditionalOnClass(Gson.class)
@EnableConfigurationProperties(GsonProperties.class)
public class GsonAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public GsonBuilder gsonBuilder(List<GsonBuilderCustomizer> customizers) {
GsonBuilder builder = new GsonBuilder();
customizers.forEach((c) -> c.customize(builder));
return builder;
}
@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) {
// ...
}
公開番号:イーフェイは(Javaドメインの知識に焦点を当て、是非における綿密な研究システムの原則にソースからと秩序の学習)