Spring Boot的应用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Spring Boot的应用

  • 前言
      • 一、Spring Boot核心概念
        • 1.1 快速入门
        • 1.2 自动配置原理
      • 二、HTTP协议与Web开发
        • 2.1 HTTP请求与响应
        • 2.2 响应数据处理
      • 三、分层解耦与IOC/DI
        • 3.1 三层架构
        • 3.2 IOC与DI
      • 四、AOP编程
        • 4.1 核心概念
        • 4.2 通知类型
        • 4.3 切入点表达式
      • 五、Maven高级开发
        • 5.1 继承与聚合
        • 5.2 私服配置(Nexus)
      • 六、扩展知识
        • 6.1 配置优先级
        • 6.2 Bean作用域
        • 6.3 第三方Bean配置


前言

Spring Boot简化Spring应用开发,有自动配置等特性。Web开发基于HTTP协议,其项目常采分层架构,Controller处理请求,Service实现业务,Dao操作数据库,各层职责清晰,利于开发维护 。


一、Spring Boot核心概念

1.1 快速入门

Spring Boot通过自动配置起步依赖简化开发,核心特点:

  • 无需XML配置:通过注解和约定快速启动项目
  • 内置Web服务器:直接运行jar包,无需部署war
  • 外部化配置:支持properties/yml配置文件

入门步骤

  1. 创建Spring Boot项目:勾选Spring Web依赖
  2. 编写Controller
    @RestController
    public class HelloController {
        @RequestMapping("/hello")
        public String hello(String name) {
            return "Hello " + name + "~";
        }
    }
    
  3. 启动测试:运行主类,访问http://localhost:8080/hello?name=World
1.2 自动配置原理

Spring Boot通过条件注解(如@ConditionalOnClass)实现自动配置:

  • 核心注解@SpringBootApplication包含:
    • @SpringBootConfiguration:声明配置类
    • @EnableAutoConfiguration:启用自动配置
    • @ComponentScan:扫描启动类所在包及其子包

自动配置流程

  1. 扫描META-INF/spring.factories中的自动配置类
  2. 根据条件注解(如@ConditionalOnMissingBean)决定是否生效
  3. 注入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 继承与聚合

继承:统一管理依赖版本


<project>
    <groupId>com.examplegroupId>
    <artifactId>parentartifactId>
    <version>1.0.0version>
    <packaging>pompackaging>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
                <version>3.2.0version>
            dependency>
        dependencies>
    dependencyManagement>
project>


<project>
    <parent>
        <groupId>com.examplegroupId>
        <artifactId>parentartifactId>
        <version>1.0.0version>
    parent>
    <artifactId>childartifactId>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>
project>

聚合:快速构建多模块项目


<project>
    <groupId>com.examplegroupId>
    <artifactId>aggregatorartifactId>
    <version>1.0.0version>
    <packaging>pompackaging>
    
    <modules>
        <module>module1module>
        <module>module2module>
    modules>
project>
5.2 私服配置(Nexus)
  1. 安装Nexus:下载并启动Nexus仓库
  2. 配置Maven:修改settings.xml
<servers>
    <server>
        <id>nexus-releasesid>
        <username>adminusername>
        <password>admin123password>
    server>
servers>

<mirrors>
    <mirror>
        <id>nexusid>
        <url>http://localhost:8081/repository/maven-public/url>
        <mirrorOf>*mirrorOf>
    mirror>
mirrors>
  1. 发布构件
mvn deploy -DaltDeploymentRepository=nexus-releases::default::http://localhost:8081/repository/maven-releases/

六、扩展知识

6.1 配置优先级

Spring Boot配置优先级(从高到低):

  1. 命令行参数
  2. SPRING_APPLICATION_JSON环境变量
  3. Java系统属性(System.getProperties()
  4. 操作系统环境变量
  5. application.properties/application.yml
  6. 打包的jar外的配置文件
  7. 打包的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();
    }
}

你可能感兴趣的:(spring,boot,后端,java)