従来の Spring プロジェクトには多くの構成ファイルが含まれます。たとえば、Redis を使用したい場合は、通常、対応する依存関係のある jar パッケージに加えて、次のものも必要になります。これらを application.xml に追加して、JedisConnectionFactory、JedisPoolConfig、および RedisTemplate を構成します。ただし、SpringBoot を使用する場合、システムは pom.xml 内の jar パッケージに基づいてこれらのクラスを自動的に生成し、IOC コンテナーに挿入します。
従来の Spring プロジェクトでは構成が必要です
<bean id="jedisConnectionFactory" class="...JedisConnectionFactory"></bean> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"></bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"></bean>
SpringBoot を使用する場合、対応する jar パッケージを pom.xml に導入することに加えて、対応するプロパティ値を構成するだけで済みます。 application.properties 内
spring-boot-autoconfigure.jar/META-INF/spring から 120 を超えるデフォルトの関数構成クラスを取得します。ファクトリ (redis の機能を含む) 構成クラス RedisAutoConfiguration の完全修飾名。一般に、機能構成クラスはこの関数を中心に展開し、複数の関連する機能クラスの管理と作成を担当します。たとえば、RedisAutoConfiguration は以下を担当します。
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
@Configuration @ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class }) @EnableConfigurationProperties(RedisProperties.class) public class RedisAutoConfiguration {}
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
@ConfigurationProperties(prefix = "spring.redis") public class RedisProperties { private int database = 0; private String url; private String host = "localhost"; private String password; private int port = 6379;
@Configuration @ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class }) @EnableConfigurationProperties(RedisProperties.class) public class RedisAutoConfiguration { @Bean @ConditionalOnMissingBean(RedisConnectionFactory.class) public JedisConnectionFactory redisConnectionFactory() throws UnknownHostException { return applyProperties(createJedisConnectionFactory()); } @Bean @ConditionalOnMissingBean(name = "redisTemplate") public RedisTemplate<Object, Object> redisTemplate( RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>(); template.setConnectionFactory(redisConnectionFactory); return template; } }
##最終的に作成されたデフォルトのアセンブリ クラスは、機能構成クラスの @Bean アノテーションを通じて IOC に挿入されます
spring.factories には、このクラスの構成クラスが含まれています。 (a 構成クラスは、この関数を囲む複数の依存クラスを作成できます)
#pom.xml には、対応する jar パッケージが必要です
さまざまな判断と依存関係に基づいて、ビジネスに必要なクラスが最終的に生成され、IOC に挿入されます。コンテナ
##依存アノテーション
##@ConditionalOnMissingBean(RedisConnectionFactory.class): これは非常に強力です。自動アセンブリを実装する場合、カスタマイズが優先されることに注意してください。ユーザーがカスタム RedisConnectionFactory.class クラスを挿入しない場合にのみ、デフォルトの JedisConnectionFactory が使用されることを示します。
クラス間の依存関係は、さまざまなアノテーションを通じて実現されており、コンテナーが起動すると、Application.run によって selectImports メソッドが呼び出されます。 EnableAutoConfigurationImportSelector.class (実際にはその親クラスのメソッド)
selectImports メソッドは最終的に SpringFactoriesLoader.loadFactoryNames メソッドを呼び出して、一般的に使用される BeanConfigurations の包括的なリストを取得します
loadFactoryNames メソッドは、FACTORIES_RESOURCE_LOCATION (つまり、spring-boot-autoconfigure.jar の下の spring.factories) を読み取り、すべての Spring 関連 Bean の完全修飾 ClassName (約 120+
selectImports メソッドは引き続き filter(configurations, autoConfigurationMetadata) を呼び出します。このとき、これらの BeanConfigurations の条件に従って 1 つずつフィルターされます。最も重要なのは @ConditionalOnClass です。この条件付きアノテーションは、 jar パッケージにこの条件付き依存関係クラスがあるかどうかを確認するため、これらの依存関係クラスを持ち、IOC 環境に必要ないくつかのデフォルト構成 Bean を生成するには、対応する jar パッケージが必要です
以上がJava SpringBoot自動アセンブリの原理は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。