容器中自动配置的类都在project->External Libraries->Maven:…->META/INFO->spring.factories中
1、在自动配置原理的最后一步是扫描META-INFO/spring.factories中的资源,将需要的组件注入spring容器中。
2、所有的能在application.properties中能都配置的属性都在xxxProperties.class中的私有属性。
3、spring.factories中自动配置类举例,凡是后缀带有AutoConfiguration的都是自动配置类,拿最后一个举例org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,</font>
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudServiceConnectorsAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
4、顾名思义这个类为servlet容器中存储转发的自动配置类,点进去看源码
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnWebApplication(
type = Type.SERVLET
)
@ConditionalOnClass({DispatcherServlet.class})
@AutoConfigureAfter({ServletWebServerFactoryAutoConfiguration.class})
public class DispatcherServletAutoConfiguration {
public static final String DEFAULT_DISPATCHER_SERVLET_BEAN_NAME = "dispatcherServlet";
public static final String DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME = "dispatcherServletRegistration";
public DispatcherServletAutoConfiguration() {
}
5、@ConditionalOnClass({ServletRequest.class}): 表示满足ServletRequest.class的条件这个配置类才有效。
6、@ConditionalOnWebApplication( type = Type.SERVLET): 表明类型为servlet此配置类才有效
7、@AutoConfigureAfter({ServletWebServerFactoryAutoConfiguration.class}): 表示在括号里的自动配置类配置完成后此配置类才有效。
8、点进ServletWebServerFactoryAutoConfiguration.class源码
@Configuration(
proxyBeanMethods = false
)
@AutoConfigureOrder(-2147483648)
@ConditionalOnClass({ServletRequest.class})
@ConditionalOnWebApplication(
type = Type.SERVLET
)
@EnableConfigurationProperties({ServerProperties.class})
@Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, EmbeddedTomcat.class, EmbeddedJetty.class, EmbeddedUndertow.class})
public class ServletWebServerFactoryAutoConfiguration {
public ServletWebServerFactoryAutoConfiguration() {
}
9、在源码中发现ServerProperties.class表明此类中的私有属性可以在application.properties中进行配置
10、点进ServerProperties.class源码
@ConfigurationProperties(
prefix = "server",
ignoreUnknownFields = true
)
public class ServerProperties {
private Integer port;
private InetAddress address;
@NestedConfigurationProperty
private final ErrorProperties error = new ErrorProperties();
private ServerProperties.ForwardHeadersStrategy forwardHeadersStrategy;
private String serverHeader;
private DataSize maxHttpHeaderSize = DataSize.ofKilobytes(8L);
private Duration connectionTimeout;
@NestedConfigurationProperty
private Ssl ssl;
11、此时可以在application.properties中以server为前缀进行配置属性。