Spring Boot 的“约定优于配置”(Convention over Configuration, CoC) 设计原则是指框架预先定义了一系列默认配置和最佳实践,使得开发者在创建和维护应用时,能够尽可能地减少显式的配置工作,只需遵循框架设定的约定即可快速构建应用。通过这种方式,Spring Boot 提升了开发效率,降低了初学者的学习曲线,并鼓励了一致性和简洁性。
以下是 Spring Boot 中“约定优于配置”的几个关键体现:
-
自动配置:
- Spring Boot 自动配置功能根据项目类路径下的jar包依赖关系,自动配置相应的Bean。例如,如果检测到HSQLDB数据库驱动在类路径下,它会自动配置一个嵌入式数据库实例和相关的JPA/Hibernate设置,开发者无需编写任何XML配置或Java配置类来启用这些功能。
示例:
// 如果项目中引入了spring-boot-starter-data-jpa依赖 // 则Spring Boot会自动配置DataSource、EntityManagerFactory等Bean // 开发者只需要编写Repository接口和实体类即可实现基本的数据库操作
-
启动器(Starter POMs):
- Spring Boot提供了一系列的启动器,它们是预定义的一组依赖集合,简化了Maven/Gradle构建配置。只需引入如
spring-boot-starter-web
这样的启动器,就包含了构建Web应用所需的全部依赖,不需要逐一列出每个依赖项。
- Spring Boot提供了一系列的启动器,它们是预定义的一组依赖集合,简化了Maven/Gradle构建配置。只需引入如
-
目录结构约定:
- Spring Boot遵循一定的目录结构约定,例如静态资源默认放在
src/main/resources/static
或src/main/resources/public
目录下,模板文件默认在src/main/resources/templates
下,这样框架就能自动识别并处理这些资源。
- Spring Boot遵循一定的目录结构约定,例如静态资源默认放在
-
属性文件加载:
- Spring Boot自动加载
application.properties
或application.yml
配置文件,遵循特定命名规则的配置文件可按需覆盖默认值。
- Spring Boot自动加载
-
组件扫描:
- 使用
@SpringBootApplication
注解的主类会自动开启组件扫描,找到标记有@Component
及其衍生注解(如@Service
,@Repository
,@Controller
等)的类,并将其注入到Spring IoC容器中,无需显示声明<context:component-scan>
标签。
- 使用
-
端点(endpoints)和监控:
- 内置了很多健康检查、审计和监控端点,按照约定的URL即可访问,无需额外配置。
-
嵌入式服务器:
- 默认集成了Tomcat、Jetty或Undertow作为嵌入式Web服务器,简化部署流程,开发者无需单独配置和部署Servlet容器。
-
@ConfigurationProperties
:- 只需在类上使用
@ConfigurationProperties
注解并关联一个前缀,Spring Boot就可以自动绑定配置文件中对应前缀下的所有配置项到这个类的属性上,省去了繁琐的手动配置过程。
- 只需在类上使用
示例:
// application.properties
myapp.datasource.url=jdbc:mysql://localhost/mydb
myapp.datasource.username=root
myapp.datasource.password=secret
// Java类
@ConfigurationProperties(prefix = "myapp.datasource")
public class DataSourceProperties {
private String url;
private String username;
private String password;
// getters and setters...
}
// 主配置类
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
在此示例中,DataSourceProperties
类会自动与application.properties
中的myapp.datasource
前缀下的配置项进行绑定,无需手工编写Bean来注入这些配置信息。
更多精彩内容请关注☄公众号: Coder无霸哥
不要让我们追赶知识, 要让知识追赶我们~