springboot嵌⼊thymeleaf后css404_极限Spring(8)Sprin。
。。
配置是 Spring Framework 的核⼼元素,配置的本质是告诉 Spring 如何运⾏应⽤程序。
Spring Boot 会引⼊名为 spring-boot-autoconfigure 的 JAR ⽂件,其中包含了很多配置类。每个配置类都在应⽤程序的 Classpath ⾥,都有机会成为应⽤程序的配置。这些配置类⾥可以⾃由选择是否在 Spring 应⽤程序⾥使⽤。
能做到这⼀点,是因为 Spring Boot 利⽤了 Spring 4.0 引⼊的条件化配置 Condition。
条件化配置允许配置存在于应⽤程序中,但在满⾜某些特定条件之前将其忽略。
Condition
定义条件类只需实现 Condition 接⼝并覆盖 matches ⽅法即可。举例来说,下⾯这个简单的条件类判断的是 Classpath ⾥是否存在JdbcTemplate,
package Name;
import t.annotation.Condition;
import t.annotation.ConditionContext;
import ype.AnnotatedTypeMetadata;
public class JdbcTemplateCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
try {
return true;
}
catch (Exception e) {
return false;
}
}
}
调⽤的时候则是,
@Conditional(JdbcTemplateCondition.class)
public MyService myService() {
...
}
只有当 JdbcTemplateCondition 类的条件成⽴才创建 MyService Bean。也就是说 MyService Bean 创建的条件是 Classpath ⾥有JdbcTemplate,否则就会被忽略。
Spring Boot 定义了很多更有趣的条件,并把它们运⽤到了配置类上,这些配置类构成了 Spring Boot 的⾃动配置。下⾯列出了所有Spring Boot 提供的条件化注解,
@ConditionalOnBean —— 配置了某个特定 Bean
@ConditionalOnMissingBean —— 没有配置特定的 Bean
@ConditionalOnClass Classpath —— ⾥有指定的类
@ConditionalOnMissingClass Classpath —— ⾥缺少指定的类
@ConditionalOnExpression —— 给定的 Spring Expression Language(SpEL)表达式计算结果为 true
@ConditionalOnJava Java —— 的版本匹配特定值或者⼀个范围值
@ConditionalOnJndi —— 参数中给定的 JNDI 位置必须存在⼀个,如果没有给参数,则要有 JNDI InitialContext
@ConditionalOnProperty —— 指定的配置属性要有⼀个明确的值
@ConditionalOnResource Classpath —— ⾥有指定的资源
@ConditionalOnWebApplication —— 这是⼀个 Web 应⽤程序
@ConditionalOnNotWebApplication —— 这不是⼀个 Web 应⽤程序
⼀般来说,Spring Boot ⾃动配置类的源代码是⼀个不断使⽤各种条件注解累加的结果。为了演⽰如何使⽤上⾯的注解, 在这⾥展⽰以下Spring Boot ⾃动配置库⾥的 DataSourceAutoConfiguration 是如何组合⼯作的。
@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ Registrar.class, DataSourcePoolMetadataProvidersConfiguration.class })
public class DataSourceAutoConfiguration {
...
}
DataSourceAutoConfiguration 上添加了 @ConditionalOnClass 注解,要求 Classpath ⾥必须要有 DataSource 和EmbeddedDatabaseType。如果它们不存在,DataSourceAutoConfiguration 提供的配置都会被忽略掉。
⾃动配置会替开发者做出配置决策。
可以理解成 Spring Boot 团队根据⾃⾝的开发经验和⼤量的测试,对近乎于所有环境都形成了⼀条配置决策链。这些决策链组合成了决策树。这个决策树借助条件化注解的⽅式形成了看似⽆所不能并适配⽆数种情况的⾃动配置。
因为 Classpath ⾥有 H2 ,所以会创建⼀个嵌⼊式的 H2 数据库 Bean,Hibernate 需要它来访问数据库。
因为 Classpath ⾥有 Hibernate(Spring Data JPA传递引⼊的)的实体管理器,所以⾃动配置会配置与 Hibernate 相关的 Bean。
因为 Classpath ⾥有Spring Data JPA,所以它会⾃动配置为根据仓库的接⼝创建仓库实现。
404页面网站源码因为 Classpath ⾥有 Thymeleaf,所以 Thymeleaf 会配置为 Spring MVC 的视图,包括 Thymeleaf 的模板解析器、模板引擎及视图解析器。
因为 Classpath ⾥有 Spring MVC, 所以会配置 Spring 的 DispatcherServlet 并启⽤Spring MVC。
因为这是⼀个 Spring MVC Web 应⽤程序,所以会注册⼀个资源处理器,⽤于资源读取。
因为 Classpath ⾥有 Tomcat(通过 Web 起步依赖传递引⽤),所以会启动⼀个嵌⼊式的Tomcat 容器,监听8080端⼝。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论