提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Spring Boot的应用
前言
Spring Boot简化Spring应用开发,有自动配置等特性。Web开发基于HTTP协议,其项目常采分层架构,Controller处理请求,Service实现业务,Dao操作数据库,各层职责清晰,利于开发维护 。
一、Spring Boot核心概念
1.1 快速入门
Spring Boot通过自动配置和起步依赖简化开发,核心特点:
- 无需XML配置:通过注解和约定快速启动项目
- 内置Web服务器:直接运行jar包,无需部署war
- 外部化配置:支持properties/yml配置文件
入门步骤:
- 创建Spring Boot项目:勾选Spring Web依赖
- 编写Controller:
@RestController public class HelloController { @RequestMapping("/hello") public String hello(String name) { return "Hello " + name + "~"; } } - 启动测试:运行主类,访问
http://localhost:8080/hello?name=World
1.2 自动配置原理
Spring Boot通过条件注解(如@ConditionalOnClass)实现自动配置:
- 核心注解
@SpringBootApplication包含:@SpringBootConfiguration:声明配置类@EnableAutoConfiguration:启用自动配置@ComponentScan:扫描启动类所在包及其子包
自动配置流程:
- 扫描
META-INF/spring.factories中的自动配置类 - 根据条件注解(如
@ConditionalOnMissingBean)决定是否生效 - 注入Bean到IOC容器
示例:自动配置Tomcat服务器:
@ConditionalOnClass({ Servlet.class, Tomcat.class })
@ConditionalOnMissingBean(value = ServletWebServerFactory.class, search = SearchStrategy.CURRENT)
public class TomcatServletWebServerFactoryAutoConfiguration {
// 配置Tomcat相关Bean
}
二、HTTP协议与Web开发
2.1 HTTP请求与响应
请求协议结构:
GET /hello?name=World HTTP/1.1
Host: localhost:8080
Accept: text/html
响应协议结构:
HTTP/1.1 200 OK
Content-Type: text/plain;charset=UTF-8
Content-Length: 11
Hello World~
代码示例:获取请求信息
@RestController
public class RequestController {
@RequestMapping("/request")
public String handleRequest(HttpServletRequest request) {
System.out.println("Method: " + request.getMethod());
System.out.println("URI: " + request.getRequestURI());
System.out.println("Header: " + request.getHeader("Accept"));
return "OK";
}
}
2.2 响应数据处理
- @ResponseBody:直接返回数据到响应体
- @RestController:组合
@Controller和@ResponseBody - JSON序列化:自动将对象转换为JSON(需添加Jackson依赖)
示例:返回JSON数据
@RestController
public class UserController {
@RequestMapping("/user")
public User getUser() {
return new User("Alice", 25);
}
}
class User {
private String name;
private int age;
// 构造方法、getter/setter省略
}
三、分层解耦与IOC/DI
3.1 三层架构
分层设计:
- Controller层:处理请求和响应
- Service层:实现业务逻辑
- Dao层:数据访问操作
示例:分层代码结构
// Controller层
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/users")
public List<User> getUsers() {
return userService.getAllUsers();
}
}
// Service层
@Service
public class UserService {
@Autowired
private UserDao userDao;
public List<User> getAllUsers() {
return userDao.findAll();
}
}
// Dao层
@Repository
public class UserDao {
public List<User> findAll() {
// 模拟数据库查询
return Arrays.asList(new User("Alice", 25), new User("Bob", 30));
}
}
3.2 IOC与DI
- 控制反转(IOC):对象创建由容器管理
- 依赖注入(DI):容器自动注入依赖对象
核心注解:
@Component:声明Bean(通用)@Controller、@Service、@Repository:按层分类的Bean@Autowired:自动注入依赖
示例:手动配置Bean
@Configuration
public class AppConfig {
@Bean
public UserDao userDao() {
return new UserDao();
}
}
四、AOP编程
4.1 核心概念
- 连接点(JoinPoint):可被拦截的方法
- 通知(Advice):增强逻辑(前置、后置等)
- 切入点(Pointcut):匹配连接点的条件
- 切面(Aspect):通知+切入点的组合
4.2 通知类型
示例:日志记录切面
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println("Before method: " + joinPoint.getSignature().getName());
}
@AfterReturning(pointcut = "execution(* com.example.service.*.*(..))", returning = "result")
public void logAfterReturning(Object result) {
System.out.println("After returning: " + result);
}
}
4.3 切入点表达式
- execution:按方法签名匹配
- @annotation:按注解匹配
示例:匹配带有@Loggable注解的方法
@Pointcut("@annotation(com.example.annotation.Loggable)")
public void loggableMethods() {}
@Around("loggableMethods()")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Around before");
Object result = joinPoint.proceed();
System.out.println("Around after");
return result;
}
五、Maven高级开发
5.1 继承与聚合
继承:统一管理依赖版本
<!-- 父工程pom.xml -->
<project>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<!-- 子工程pom.xml -->
<project>
<parent>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>child</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
聚合:快速构建多模块项目
<!-- 聚合工程pom.xml -->
<project>
<groupId>com.example</groupId>
<artifactId>aggregator</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>module1</module>
<module>module2</module>
</modules>
</project>
5.2 私服配置(Nexus)
- 安装Nexus:下载并启动Nexus仓库
- 配置Maven:修改
settings.xml
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<url>http://localhost:8081/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
- 发布构件:
mvn deploy -DaltDeploymentRepository=nexus-releases::default::http://localhost:8081/repository/maven-releases/
六、扩展知识
6.1 配置优先级
Spring Boot配置优先级(从高到低):
- 命令行参数
SPRING_APPLICATION_JSON环境变量- Java系统属性(
System.getProperties()) - 操作系统环境变量
application.properties/application.yml- 打包的jar外的配置文件
- 打包的jar内的配置文件
6.2 Bean作用域
- singleton:单例(默认)
- prototype:多例
- request:每次HTTP请求创建
- session:每个HTTP Session创建
- application:全局唯一
示例:配置多例Bean
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public User user() {
return new User();
}
6.3 第三方Bean配置
使用@Bean声明第三方组件:
@Configuration
public class ThirdPartyConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}

1184

被折叠的 条评论
为什么被折叠?



