Projek Spring Tradisional akan mempunyai banyak fail konfigurasi Contohnya, jika kita ingin menggunakan Redis, secara amnya sebagai tambahan kepada pakej balang bergantung yang sepadan, kita juga perlu. tambahkannya dalam application.xml Konfigurasikan JedisConnectionFactory, JedisPoolConfig dan RedisTemplate. Tetapi jika anda menggunakan SpringBoot, sistem akan menjana kelas ini secara automatik berdasarkan pakej balang dalam pom.xml dan menyuntiknya ke dalam bekas IOC.
Dalam projek Spring tradisional, konfigurasi diperlukan
<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>
Apabila menggunakan SpringBoot, selain memperkenalkan pakej balang yang sepadan dalam pom.xml, anda hanya perlu mengkonfigurasi nilai sifat yang sepadan. dalam application.properties.
Dapatkan lebih daripada 120 kelas konfigurasi fungsi lalai daripada spring-boot-autoconfigure.jar/META-INF /spring.factories, termasuk redis Nama yang layak sepenuhnya bagi kelas konfigurasi berfungsi RedisAutoConfiguration Secara amnya, kelas konfigurasi berfungsi mengelilingi fungsi ini dan bertanggungjawab untuk menguruskan penciptaan berbilang kelas fungsi yang berkaitan, contohnya, RedisAutoConfiguration bertanggungjawab untuk:
JedisConnectionFactory, RedisTemplate, StringRedisTemplate Penciptaan ketiga-tiga kelas berfungsi ini
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
Satu syarat untuk kelas konfigurasi RedisAutoConfiguration berkuat kuasa ialah @ConditionalOnClass : JedisConnection.class, RedisOperations.class, Jedis.class, jadi ia akan pergi ke classpath. Cari fail kelas yang sepadan
@Configuration @ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class }) @EnableConfigurationProperties(RedisProperties.class) public class RedisAutoConfiguration {}
Jika pom. xml mempunyai pakej balang yang sepadan, anda boleh memadankan kelas pergantungan yang sepadan: JedisConnection.class, kelas RedisOperations, Jedis.class
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
akan berjaya dipadankan. , kelas konfigurasi fungsi ini akan berkuat kuasa dan kelas konfigurasi sifat lalai @EnableConfigurationProperties(kelasRedisProperties.)
@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;
Konfigurasi fungsi Redis akan menjana akhir JedisConnectionFactory dan RedisTemplate mengikut syarat syaratnya ialah dalam persekitaran IOC, tiada
@ConditionalOnMissingBean(RedisConnectionFactory.class), RedisTemplate
@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; } }
Terdapat kelas konfigurasi untuk kelas ini pada musim bunga .factories (a Kelas konfigurasi boleh mencipta kelas pergantungan berbilang di sekeliling fungsi ini)
pom.xml perlu mempunyai pakej balang yang sepadan
@ SpringBootApplication: Anotasi kelas permulaan aplikasi projek sb sebenarnya adalah gabungan tiga anotasi: @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan, yang mana yang kedua memainkan peranan dalam pemasangan automatik
@Import(EnableAutoConfigurationImportSelector.class): Anotasi ini agak berkuasa Anda boleh mendaftarkan kacang yang tidak didaftarkan dalam IOC ke IOC secara paksa, menunjukkan bahawa untuk memulakan fungsi konfigurasi automatik, anda perlu memperkenalkan EnableAutoConfigurationImportSelector.class <.>
@Configuration
@ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class }): Menunjukkan bahawa untuk kelas konfigurasi RedisAutoConfiguration untuk berfungsi, mesti ada pakej balang yang mengandungi kelas ini
@EnableConfigurationProperties(RedisProperties.class): Menunjukkan bahawa konfigurasi dalam RedisProperties.class dirujuk secara lalai
@ConditionalOnMissingBean(RedisConnectionFactory.class): Ini sangat berkuasa Nota, penyesuaian diutamakan apabila melaksanakan pemasangan automatik. Menunjukkan bahawa JedisConnectionFactory lalai akan digunakan hanya jika pengguna tidak menyuntik tersuai kelas RedisConnectionFactory.class.
Kebergantungan antara kelas direalisasikan melalui pelbagai anotasi Apabila bekas memulakan Application.run, ia akan Memanggil kaedah selectImports daripada EnableAutoConfigurationImportSelector.class (sebenarnya kaedah kelas induknya)
kaedah selectImports akhirnya akan memanggil kaedah SpringFactoriesLoader.loadFactoryNames untuk mendapatkan senarai komprehensif BeanConfigurations yang biasa digunakan
Atas ialah kandungan terperinci Apakah prinsip pemasangan automatik java SpringBoot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!