spring测试起步

开始一个测试

类上只要添加这3个注解,就可以开始测试了。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(“classpath:spring-context.xml”)
@WebAppConfiguration

注解的作用

@ContextConfiguration用来加载根applicationcontext
@WebAppConfiguration,用来创造伪造的servletcontext,request、response,比较专业的名字叫MockServletContext

事务

默认事务都回滚,如果提交可以添加@Commit,@Commit用来替代@RollBack,目前推荐使用@Commit

<think>在SpringBoot中,起步依赖(StarterDependencies)是其核心特性之一,它极大地简化了项目配置。起步依赖的原理主要是通过Maven或Gradle的依赖管理机制,将一组常用的相关依赖打包在一起,并提供默认的配置。这样开发者只需要引入一个起步依赖,就能自动获得开发某一功能所需的所有依赖库。###SpringBoot起步依赖原理详解####1.起步依赖的工作机制起步依赖本质上是一个Maven项目对象模型(POM)文件,它定义了某个功能模块所需的所有依赖(包括传递依赖)。当你引入一个起步依赖时,Maven或Gradle会自动解析并传递包含这些依赖。**示例:`spring-boot-starter-web`的依赖树**```xmlspring-boot-starter-web├──spring-boot-starter│├──spring-boot│├──spring-boot-autoconfigure│└──...├──spring-boot-starter-json├──spring-boot-starter-tomcat├──spring-web└──spring-webmvc```####2.自动配置原理起步依赖通常与自动配置(Auto-Configuration)配合使用:-**自动配置类**:使用`@EnableAutoConfiguration`或`@SpringBootApplication`注解触发,SpringBoot会扫描classpath下的`META-INF/spring.factories`文件,加载其中声明的自动配置类。-**条件化配置**:自动配置类使用`@ConditionalOnClass`、`@ConditionalOnMissingBean`等条件注解,根据classpath中是否存在特定类或容器中是否已存在某个Bean来决定是否应用该配置。**示例:自动配置类**```java@Configuration@ConditionalOnClass({Servlet.class,DispatcherServlet.class})@ConditionalOnWebApplication(type=Type.SERVLET)@EnableConfigurationProperties(WebMvcProperties.class)publicclassWebMvcAutoConfiguration{//自动配置DispatcherServlet、视图解析器等}```####3.自定义起步依赖实现步骤以下是创建自定义起步依赖的步骤(以Maven为例):**步骤1:创建起步依赖POM项目**```xml<!--自定义起步依赖的pom.xml--><project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-spring-boot-starter</artifactId><version>1.0.0</version><dependencies><!--核心依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--功能实现库--><dependency><groupId>com.example</groupId><artifactId>my-library</artifactId><version>1.0.0</version></dependency></dependencies></project>```**步骤2:创建自动配置模块**```java//自动配置类@Configuration@ConditionalOnClass(MyService.class)publicclassMyAutoConfiguration{@Bean@ConditionalOnMissingBeanpublicMyServicemyService(){returnnewDefaultMyService();}}```**步骤3:注册自动配置类**在`src/main/resources/META-INF/spring.factories`文件中:```propertiesorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.MyAutoConfiguration```####4.核心优势1.**简化依赖管理**:开发者无需记忆复杂依赖关系2.**版本兼容性保证**:SpringBoot管理的起步依赖版本经过测试兼容3.**开箱即用**:默认配置满足大部分场景需求4.**易于扩展**:支持覆盖默认配置####5.使用示例引入Web功能只需要一个依赖:```xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>```###原理总结SpringBoot起步依赖的本质是**依赖聚合+自动配置**:1.通过Maven的依赖传递机制聚合功能相关库2.通过条件化自动配置实现零配置启动3.通过`spring-boot-starter-parent`统一管理版本这种设计符合"约定优于配置"原则,使开发者能够快速搭建项目环境。§§相关问题§§:1.SpringBoot自动配置是如何实现的?2.如何自定义一个SpringBootStarter?3.`@Conditional`注解有哪些具体类型,分别起什么作用?4.SpringBoot的起步依赖与普通Maven依赖有什么区别?</think> ### Spring Boot起步依赖原理详解 Spring Boot的起步依赖(Starter Dependencies)是其"约定优于配置"理念的核心实现,通过简化依赖管理显著提升开发效率。以下是其工作原理和底层机制: #### 1. 核心机制原理 Spring Boot起步依赖本质上是**预定义依赖描述符**(Maven POM或Gradle构建脚本片段),通过**依赖传递**自动引入相关技术的全套组件: ```xml <!-- spring-boot-starter-web的简化POM结构 --> <project> <artifactId>spring-boot-starter-web</artifactId> <dependencies> <!-- 内嵌容器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <!-- Spring MVC框架 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <!-- JSON支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-json</artifactId> </dependency> <!-- 验证框架 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> </dependencies> </project> ``` #### 2. 工作原理图解 ```mermaid graph TD A[开发者引入starter] --> B[Maven/Gradle解析POM] B --> C[获取预定义依赖树] C --> D[下载传递依赖] D --> E[自动版本对齐] E --> F[形成完整类路径] ``` #### 3. 版本管理机制 Spring Boot通过**物料清单(BOM)**实现版本一致性管理: ```xml <!-- spring-boot-dependencies POM片段 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${revision}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` #### 4. 自动配置触发流程 起步依赖与自动配置紧密协作: ```java // spring-boot-autoconfigure 中的配置类 @Configuration(proxyBeanMethods = false) @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class }) @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10) @AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class }) public class WebMvcAutoConfiguration { // 自动配置MVC相关Bean } ``` #### 5. 条件化装配原理 Spring Boot使用`@Conditional`注解实现智能装配: ```java @Bean @ConditionalOnClass(name = "com.fasterxml.jackson.databind.ObjectMapper") @ConditionalOnMissingBean public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder() { return new Jackson2ObjectMapperBuilder(); } ``` #### 6. 自定义起步依赖示例 创建自定义starter的步骤: 1. **创建自动配置模块** ```java // 自动配置类 @Configuration @ConditionalOnClass(MyService.class) public class MyAutoConfiguration { @Bean @ConditionalOnMissingBean public MyService myService() { return new DefaultMyService(); } } ``` 2. **注册配置类** 创建`src/main/resources/META-INF/spring.factories`: ```properties org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.MyAutoConfiguration ``` 3. **创建starter POM** ```xml <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>my-autoconfigure</artifactId> </dependency> </dependencies> ``` #### 7. 核心优势与价值 1. **依赖简化**:单个依赖替代传统多个依赖声明 2. **版本协调**:解决依赖冲突(如Servlet API兼容问题) 3. **自动装配**:零配置启动标准应用 4. **能力封装**:技术栈开箱即用(如Web/JPA/Security) 5. **环境隔离**:提供test/runtime等作用域依赖 #### 8. 与常规依赖管理的对比 | 特性 | 传统Maven/Gradle | Spring Boot Starter | |-----------------|------------------------------|-----------------------------| | 依赖声明 | 需显式声明所有依赖 | 单依赖包含完整技术栈 | | 版本管理 | 手动管理版本冲突 | BOM统一管理兼容版本 | | 配置复杂度 | 需手动配置组件集成 | 自动配置默认实现 | | 学习曲线 | 需了解所有组件依赖关系 | 面向功能声明依赖 | | 入门速度 | 慢(需搭建基础环境) | 快(一键启动) | ### 设计哲学 Spring Boot起步依赖体现了以下设计原则: 1. **约定优于配置**:提供合理的默认值 2. **模块化设计**:按功能解耦技术栈 3. **开闭原则**:支持自定义覆盖默认配置 4. **依赖倒置**:面向接口不依赖具体实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值