java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot全解析

一文解析SpringBoot到底强在哪

作者:晔子yy

SpringBoot是基于Spring框架的快速开发脚手架,采用约定优于配置的理念,让开发者能够快速创建独立运行、生产级的Spring应用程序,它通过简化配置和自动装配机制,大幅减少了传统Spring应用开发中的样板代码,下面通过本文解析SpringBoot到底强在哪,感兴趣的朋友一起看看吧

1.SpringBoot简介

核心概念

SpringBoot是基于Spring框架的快速开发脚手架,采用约定优于配置的理念,让开发者能够快速创建独立运行、生产级的Spring应用程序。它通过简化配置自动装配机制,大幅减少了传统Spring应用开发中的样板代码。

SpringBoot与Spring框架关系

或许很多人都认为SpingBoot是Spring的替代品,其实并非这样,SpringBoot是Spring框架的扩展和增强:

SpringBoot主要优势

2.SpringBoot的核心特性

自动配置

在我们创建一个初始的SpringBoot项目时,在启动类上会有一个@SpringBootApplication注解,SpringBoot的自动配置就是该注解中的@EnableAutoConfiguration所实现的

// SpringBoot自动根据classpath中的jar包、已定义的bean等条件
// 自动配置相应的组件
@EnableAutoConfiguration  // 启用自动配置
// 例如:当classpath中有HSQLDB时,自动配置内存数据库

工作流程:

1.检查classpath中的依赖

2.读去spring.factories中的配置类

3.根据条件注解(@Conditional)决定是否创建Bean

4.应用默认属性配置

起步依赖

起步依赖是一组预定义好的依赖描述符,它将某个功能相关的常见依赖打包在一起,开发者只需引入一个 starter,即可获得开发该功能所需的所有库。

<!-- 示例:添加Web Starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 数据库 Starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

特点

内嵌服务器

Spring Boot 内置了多个流行的 Servlet 容器,允许开发者无需部署 WAR 包即可运行 Web 应用。

Spring Boot 支持以下三种主流的嵌入式服务器:

如果你想使用其他的服务器,可以在xml文件中更改依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 排除 Tomcat -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 切换为 Jetty -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- 或切换为 Undertow -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

3.SpringBoot常见注解

启动类相关注解

@SpringBootApplication(核心启动注解)

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

作用:组合注解,包含以下三个核心注解:

常用参数:

@SpringBootApplication(
    scanBasePackages = "com.example",  // 扫描包路径
    exclude = {DataSourceAutoConfiguration.class},  // 排除自动配置
    scanBasePackageClasses = {UserService.class}  // 扫描特定类所在包
)

@SpringBootTest(测试)

src.text包下自动为我们创建好的测试类

@SpringBootTest()
class ApplicationTests {
    @Test
    void contextLoads() {
      //测试代码
    }
}

配置相关注解

@Configuration​ +@Bean

@Configuration修饰的类是一个配置类,@Bean注解能够将被声明方法的返回值放入springIoC容器内。

@Configuration
public class AppConfig {
    @Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper();
    }
}

此时ObjectMapper类就会被SpringIoC容器管理。

@Autowried

@Autowried一般修饰在字段上实现依赖注入

@Component
public class OrderService {
    @Autowired
    private UserRepository userRepository;  // 字段注入
    @Autowired
    private ProductRepository productRepository;
}

@Value

@Value是用于注入配置值的注解

@Component
public class AppConfig {
    // 1. 注入简单字符串
    @Value("${app.name}")
    private String appName;
    // 2. 注入数字
    @Value("${app.port:8080}")  // 默认值
    private int port;
    // 3. 注入布尔值
    @Value("${app.enabled:true}")
    private boolean enabled;
    // 4. 注入浮点数
    @Value("${app.version:1.0}")
    private double version;
}

Controller 相关注解

@RestController

@RestController@Component作用类似,用于标注这是一个Controller类

@RequestMapping

@RequestMapping用于将 HTTP 请求映射到控制器方法

类级别注解

@RestController
@RequestMapping("/api/v1/users")  // 类级别路径前缀
public class UserController {
    // 完整路径: /api/v1/users
    @GetMapping
    public List<User> getUsers() {
        return userService.findAll();
    }
    // 完整路径: /api/v1/users/{id}
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.findById(id);
    }
}

方法级别注解

@RestController
public class SimpleController {
    // 映射到 /hello
    @RequestMapping("/hello")
    public String hello() {
        return "Hello World";
    }
    // 映射到 /greet
    @RequestMapping(value = "/greet", method = RequestMethod.GET)
    public String greet() {
        return "Greetings!";
    }
}

4.SpringBoot数据库的集成

SpringBoot能通过简单的yaml配置实现数据库的自动连接

一个简单的数据配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo_db
    username: demo_user
    password: demo_pass
    driver-class-name: com.mysql.cj.jdbc.Driver

简单的CRUD示例(Spring Data JPA):

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    // 创建用户
    public User createUser(User user) {
        return userRepository.save(user);
    }
    // 查询用户
    public User getUserById(Long id) {
        return userRepository.findById(id)
                .orElseThrow(() -> new UserNotFoundException("用户不存在"));
    }
    // 更新用户
    public User updateUser(Long id, User userDetails) {
        User user = getUserById(id);
        user.setUsername(userDetails.getUsername());
        user.setEmail(userDetails.getEmail());
        return userRepository.save(user);
    }
    // 删除用户
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
    // 查询所有用户
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}

5.pringBoot RESTful API开发

REST架构核心概念

REST(Representational State Transfer)是一种软件架构风格,包含以下核心概念:

RESTful API设计规范

RESTful API是在这四种经典Http方法的基础上建立的

经典的使用示例如下:

@RestController
@RequestMapping("/api/v1/users")
public class UserController {
    // GET /api/v1/users
    @GetMapping
      // 获取所有用户
    // GET /api/v1/users/{id}
    @GetMapping("/{id}")
        // 根据ID获取用户
    // POST /api/v1/users
    @PostMapping
        // 创建用户
    // PUT /api/v1/users/{id}
    @PutMapping("/{id}")
        // 更新用户
    // DELETE /api/v1/users/{id}
    @DeleteMapping("/{id}")
        // 删除用户
}

到此这篇关于一文解析SpringBoot到底强在哪的文章就介绍到这了,更多相关SpringBoot全解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文