您的位置:首页 > 房产 > 建筑 > 网页打不开视频怎么办_高防服务器服务_河北seo推广方案_长尾关键词挖掘词

网页打不开视频怎么办_高防服务器服务_河北seo推广方案_长尾关键词挖掘词

2025/1/11 22:50:01 来源:https://blog.csdn.net/baidu_25347287/article/details/145050473  浏览:    关键词:网页打不开视频怎么办_高防服务器服务_河北seo推广方案_长尾关键词挖掘词
网页打不开视频怎么办_高防服务器服务_河北seo推广方案_长尾关键词挖掘词

Spring Boot 自动配置特性详细介绍

为了更详细地介绍 Spring Boot 的自动配置特性,我们将从以下几个方面进行深入分析:自动配置的工作原理、常见自动配置场景及其源码分析、自定义自动配置的方法,并结合具体的实例和关键源码进行说明。

1. 自动配置工作原理

1.1 条件注解

Spring Boot 使用条件注解来决定是否创建某个 Bean。常见的条件注解包括:

  • @ConditionalOnClass:只有当类路径中存在指定的类时才生效。
  • @ConditionalOnMissingBean:只有当容器中不存在指定类型的 Bean 时才生效。
  • @ConditionalOnProperty:根据配置文件中的属性值决定是否生效。

示例:

@Configuration
@ConditionalOnClass(DataSource.class)
public class DataSourceAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic DataSource dataSource() {return new EmbeddedDatabaseBuilder().build();}
}
1.2 启动器依赖

引入特定的 Starter 依赖后,Spring Boot 会自动配置与该依赖相关的组件。例如,引入 spring-boot-starter-web 后,Spring Boot 会自动配置 Tomcat 和 Spring MVC。

示例:

pom.xml 中添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 配置文件格式

Spring Boot 支持多种配置文件格式,如 .properties.yaml。YAML 格式具有层次结构清晰、可读性强的特点。

2.1 YAML 文件示例
server:port: 8080servlet:context-path: /appspring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: secretjpa:hibernate:ddl-auto: updateshow-sql: truelogging:level:root: infoorg.springframework: debug

3. 自动配置的工作流程

  1. 加载配置文件:Spring Boot 在启动时会自动加载 application.yaml 文件中的配置项。
  2. 解析配置项:将配置项解析为对应的 Java 属性,并注入到相应的 Bean 中。
  3. 应用条件注解:根据条件注解判断是否需要创建某些 Bean。
  4. 初始化组件:根据配置项和条件注解的结果,初始化并装配所需的组件和服务。

4. 常见的自动配置场景及源码分析

4.1 数据源配置

自动配置类: DataSourceAutoConfiguration

关键源码:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class,DataSourceInitializationConfiguration.class })
public class DataSourceAutoConfiguration {@Bean@ConfigurationProperties("spring.datasource")public DataSourceProperties dataSourceProperties() {return new DataSourceProperties();}@Bean@ConditionalOnMissingBean@ConditionalOnProperty(name = "spring.datasource.type")public DataSource dataSource(DataSourceProperties properties) {return properties.initializeDataSourceBuilder().build();}
}

使用示例:

spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: secret
4.2 Web 应用配置

自动配置类: WebMvcAutoConfiguration

关键源码:

@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@Import({ WebMvcAutoConfigurationAdapter.class, HttpEncodingAutoConfiguration.class,HttpMessageConvertersAutoConfiguration.class, DispatcherServletAutoConfiguration.class,ErrorMvcAutoConfiguration.class })
public class WebMvcAutoConfiguration {private final DispatcherServletPath dispatcherServletPath;private final ResourceProperties resourceProperties;private final WebMvcProperties mvcProperties;private final ListableBeanFactory beanFactory;public WebMvcAutoConfiguration(DispatcherServletPath dispatcherServletPath,ResourceProperties resourceProperties, WebMvcProperties mvcProperties,ObjectProvider<ListableBeanFactory> beanFactory) {this.dispatcherServletPath = dispatcherServletPath;this.resourceProperties = resourceProperties;this.mvcProperties = mvcProperties;this.beanFactory = beanFactory.getIfAvailable();}// 其他配置方法...
}

使用示例:

server:port: 8080servlet:context-path: /app
4.3 安全配置

自动配置类: SecurityAutoConfiguration

关键源码:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ SecurityContextHolder.class, AuthenticationManager.class })
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnEnabledSecurityFeature
@AutoConfigureBefore(HttpSecurityConfigurations.class)
@AutoConfigureAfter({ MetricsWebAutoConfiguration.class, MvcRequestMetricsFilterAutoConfiguration.class })
public class SecurityAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic UserDetailsService userDetailsService() {UserDetails user = User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build();return new InMemoryUserDetailsManager(user);}// 其他配置方法...
}

使用示例:

spring:security:user:name: userpassword: password
4.4 缓存配置

自动配置类: CacheAutoConfiguration

关键源码:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(CacheManager.class)
@ConditionalOnBean(CacheConfiguration.class)
@AutoConfigureAfter({ ContextRefreshedEvent.class, CacheConfiguration.class })
@AutoConfigureBefore({ JCacheCacheConfiguration.class, EhCacheCacheConfiguration.class,CaffeineCacheConfiguration.class, SimpleCacheConfiguration.class,CompositeCacheConfiguration.class })
public class CacheAutoConfiguration {@Bean@ConditionalOnMissingBean@ConditionalOnProperty(prefix = "spring.cache", name = "type", havingValue = "simple", matchIfMissing = true)public CacheManager cacheManager() {return new SimpleCacheManager();}// 其他配置方法...
}

使用示例:

spring:cache:type: simple

5. 自定义自动配置

如果默认的自动配置不能满足需求,我们可以通过以下方式自定义自动配置:

5.1 编写自定义配置类

示例:

@Configuration
@ConditionalOnClass(RedisTemplate.class)
public class RedisAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);return template;}
}
5.2 扩展现有配置

通过继承或组合的方式扩展现有的自动配置类。

示例:

@Configuration
@Import(DataSourceAutoConfiguration.class)
public class CustomDataSourceAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic DataSource customDataSource(DataSourceProperties properties) {// 自定义数据源逻辑return properties.initializeDataSourceBuilder().build();}
}
5.3 禁用自动配置

application.yaml 中使用 spring.autoconfigure.exclude 属性禁用某些自动配置类。

示例:

spring:autoconfigure:exclude: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

6. 总结

Spring Boot 的自动配置特性极大地简化了开发过程,减少了繁琐的配置工作。通过合理的配置文件管理和条件注解的使用,我们可以快速构建出高效、稳定的 Spring Boot 应用程序。
而理解自动配置的工作原理和常见场景的源码实现,有助于更好地掌握 Spring Boot 的核心机制,并能够灵活应对各种实际开发需求。
后面一节,我们会针对某个Spring Boot的自动配置源码,来深入分析自动配置的原理,并手撸一个我们自己的自动配置类。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com