springboot自动配置
引
言
Spring Boot的一个强大功能是它能够根据我们添加到类路径中的jar依赖项自动配置我们的应用程序。 在这篇文章中,我们将介绍Spring Boot自动配置功能,并了解它如何在开发周期中提供帮助。
介绍
可以从提出非常简单的问题开始,为什么我们需要Spring Boot自动配置? 在我们的应用程序中使用Spring Boot有什么好处? 为了更好地回答这些问题,我们来看看创建一个没有Spring Boot的简单Spring MVC应用程序所需的配置:
<beans:beans> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean> <beans:bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <beans:property name="defaultLocale" value="en"></beans:property> </beans:bean> <!-- other configuration --> </beans:beans>
我们还需要在web.xml文件中配置请求分发servlet作为配置的一部分。 对于数据库应用程序,我们需要Hibernate/JPA的其他配置以及数据源和其他配置。
在企业Spring应用程序中,这些配置可能会变得非常复杂,我们可能最终会配置很多东西来启动我们的应用程序。
1
什么是自动配置
倘若系统可以根据类路径中的jar提供一些默认设置以及根据我们的要求覆盖它的选项会怎样:
Spring Boot自动配置提供了这些能力。自动配置将尝试根据类路径中的jar自动尝试使用默认行为设置我们的应用程序。 例如,如果Spring Boot在类路径中找到HSQLDB,它将自动为我们配置内存数据库。将自动配置思想作为一个智能系统,可以根据配置的jar提供给我们的应用程序,我们的类路径。
2
自动配置实际应用
要了解Spring Boot自动配置内部如何工作,我们可以使用Spring Boot创建Spring MVC应用程序,使用Spring Boot创建web应用程序。
运行MVC应用程序并查看控制台,你可能会在控制台中找到类似的输出:
2018-11-27 11:30:28.642 [main] INFO 2018-11-27 11:30:28.642 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/8.5.34 2018-11-27 11:30:28.646 [localhost-startStop-1] INFO org.apache.catalina.core.AprLifecycleListener - The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/typhoon/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.] 2018-11-27 11:30:28.729 [localhost-startStop-1] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext 2018-11-27 11:30:28.729 [localhost-startStop-1] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 1383 ms 2018-11-27 11:30:29.217 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'characterEncodingFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'webMvcMetricsFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'httpPutFormContentFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'requestContextFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.FilterRegistrationBean - Mapping filter: 'httpTraceFilter' to: [/*] 2018-11-27 11:30:29.218 [localhost-startStop-1] INFO o.s.boot.web.servlet.ServletRegistrationBean - Servlet dispatcherServlet mapped to [/]
在示例应用程序中,我们从未为部署定义任何请求分发servlet或配置的tomcat,但是我们仍然可以在控制台中找到映射servlet:'dispatcherServlet'到[/],这是因为我们在应用程序中的pom.xml中添加了spring-boot-starter-web:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
这个案例演示了自动配置的功能和特性,在我们的应用程序中添加此启动器时,Spring Boot自动配置知道我们正在构建MVC应用程序,并且它在Spring MVC Web应用程序的类路径中添加了所有必需的依赖项。
这将提前为我们自动配置了DispactherServlet,CharacterEncodingFilter,RequestContextFilter甚至错误页面(我们从未对这些进行任何配置)。 Spring Boot将根据pom文件中添加的Spring Boot Starters添加类似的配置。
3
自动配置详细信息
接下来我们检查自动配置在内部如何工作,使用IDE(Eclipse或IntelliJ等)检查添加到类路径的内容:
如上面的屏幕截图所示,Spring Boot会自动为我们添加依赖项,以确保我们已准备好使用应用程序。
3.1:spring.factories
要为我们的应用程序启用自动配置,我们可以在我们的应用程序中使用@AutoConfiguration或@SpringBootApplication注解,查看spring-boot-autoconfigure.jar下/ META-INF目录下的spring.factories属性文件:
此文件包含将由Spring Boot自动启用的自动配置类的列表。 以下是spring.factories文件的示例输出:
# Auto Configure 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.CloudAutoConfiguration,\ org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\ org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
自动配置类大致如下:
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @Configuration @ConditionalOnWebApplication @ConditionalOnClass(DispatcherServlet.class) @AutoConfigureAfter(EmbeddedServletContainerAutoConfiguration.class) public class DispatcherServletAutoConfiguration { //configuration code }
注解和其他详细信息在本篇中不做过多的描述。
输总结
在这篇文章中,我们介绍了Spring Boot自动配置功能,简单分析了Configurationation的一些有趣功能以及它在内部的工作原理。
Spring Boot自动配置的比较好的点是它具有无创性,你可以通过自定义自己的配置以替换默认自动配置。
本文分享自 PersistentCoder 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!