SpringBoot menghidupkan konfigurasi automatik melalui anotasi @EnableAutoConfiguration dan mengimbas fail spring.factories di bawah pakej balang syarat yang ditentukan oleh anotasi @Condition dipenuhi, ia akan digunakan dengan sokongan kebergantungan dan didaftarkan dalam bekas Spring.
Untuk meletakkannya dalam istilah orang awam, apabila kami menulis projek ssm sebelum ini, kami mengkonfigurasi banyak koordinat dan kandungan konfigurasi Proses menyediakan persekitaran mengambil banyak masa dalam pembangunan projek ciri terbesar SpringBoot ialah ia memudahkan pelbagai kandungan konfigurasi xml, jadi konfigurasi automatik springboot menggunakan anotasi untuk membuat konfigurasi lalai untuk beberapa konfigurasi konvensional, memudahkan kandungan konfigurasi xml supaya projek anda boleh berjalan dengan cepat.
Prinsip konfigurasi teras Springboot:
Kelas konfigurasi automatik disimpan dalam org.springframework.boot.autoconfigure di bawah spring-boot-autoconfigure-version number.jar
Mulakan bekas apabila kami mengkonfigurasi debug=true dalam application.properties. Anda boleh melihat konfigurasi awal permulaan pelayan
Pengawal bahagian hadapan berdaftar DispatcherServletAutoConfigratio
EmbeddedServletContainerAutoConfiguration jenis bekas berdaftar
2. Komponen pemula
Komponen Pemula yang lengkap merangkumi dua perkara berikut:
Modul konfigurasi automatik yang menyediakan fungsi konfigurasi automatik
Menyediakan dependencies Modul komponen fungsi pos pengurusan perhubungan merangkumi semua fungsi komponen dan boleh digunakan di luar kotak. spring-boot-starter-web bergantung pada kod sumberpackage org.springframework.boot.autoconfigure.web.servlet; @Configuration @ConditionalOnClass({ServletRequest.class}) @ConditionalOnWebApplication( type = Type.SERVLET ) @EnableConfigurationProperties({ServerProperties.class}) @Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class}) public class ServletWebServerFactoryAutoConfiguration { ...... } @
@Override public String[] selectImports(AnnotationMetadata annotationMetadata) { //检查自动配置功能是否开启,默认开启 if (!isEnabled(annotationMetadata)) { return NO_IMPORTS; } //加载自动配置的元信息 AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader .loadMetadata(this.beanClassLoader); AnnotationAttributes attributes = getAttributes(annotationMetadata); //获取候选配置类 List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes); //去掉重复的配置类 configurations = removeDuplicates(configurations); //获得注解中被exclude和excludeName排除的类的集合 Set<String> exclusions = getExclusions(annotationMetadata, attributes); //检查被排除类是否可实例化、是否被自动注册配置所使用,不符合条件则抛出异常 checkExcludedClasses(configurations, exclusions); //从候选配置类中去除掉被排除的类 configurations.removeAll(exclusions); //过滤 configurations = filter(configurations, autoConfigurationMetadata); //将配置类和排除类通过事件传入到监听器中 fireAutoConfigurationImportEvents(configurations, exclusions); //最终返回符合条件的自动配置类的全限定名数组 return StringUtils.toStringArray(configurations);
public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) { String factoryClassName = factoryClass.getName(); try { Enumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION) : ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION)); List<String> result = new ArrayList<String>(); while (urls.hasMoreElements()) { URL url = urls.nextElement(); Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url)); String factoryClassNames = properties.getProperty(factoryClassName); result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames))); } return result; } catch (IOException ex) { throw new IllegalArgumentException("Unable to load [" + factoryClass.getName() + "] factories from location [" + FACTORIES_RESOURCE_LOCATION + "]", ex); } }
com.xxx.interface= com.xxx .nama kelas
Atas ialah kandungan terperinci Apakah prinsip pelaksanaan konfigurasi automatik SpringBoot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!