Spring Boot 详解

155 阅读6分钟

Spring Boot是一个快速开发的框架,它基于Spring Framework,并集成了大量常用的第三方库,如Tomcat、Hibernate、MyBatis、Thymeleaf等,从而简化了企业级应用的开发。

Spring Boot的优点

快速开发

Spring Boot使用约定优于配置的思想,将很多开发过程中需要手动配置的场景进行自动配置,从而极大地减少了开发人员的工作量。同时,Spring Boot还提供了很多便捷的注解和API,以及一些快速开发的工具,如Spring Initializr,可以在几分钟内快速创建一个项目结构,让开发更加迅速和高效。

易于部署

Spring Boot内嵌了Web服务器,无需额外安装Tomcat等Web容器,打包后可以直接运行,非常方便。

整合各种技术

Spring Boot提供了大量常用的第三方库的自动配置,比如数据库访问、模板引擎、日志框架等,同时也支持各种技术的整合,如Spring Cloud、Spring Security等,实现微服务或分布式应用的开发。

Spring Boot的核心特性

自动配置

Spring Boot通过自动配置来减少开发人员的工作量,它会根据项目依赖的类库和运行环境自动完成配置,并提供默认值。当然,这些自动配置都可以被覆盖或扩展。

命令行界面

Spring Boot提供了命令行界面(CLI),可以在终端运行一些基本的Spring Boot应用程序,如运行一个Web应用程序、查看应用程序的信息等。

Actuator

Actuator是Spring Boot的监控组件,可用于监控和管理Spring Boot应用程序。通过Actuator,可以方便地查看应用程序的健康状况、性能指标、日志信息等。

多环境支持

Spring Boot支持多种不同的配置文件格式,如YAML、Properties等,以及多种不同的环境配置,如开发环境、测试环境和生产环境等。可以通过设置不同的配置文件和环境变量来实现不同的配置。

Spring Boot CLI

Spring Boot CLI是Spring Boot的命令行工具,它通过Groovy脚本语言来快速创建和运行Spring Boot应用程序,以及在开发过程中使用各种插件简化开发流程。

Spring Boot的使用

创建项目

可以通过Spring Initializr创建Spring Boot项目,也可以手动创建Maven或Gradle项目并导入Spring Boot的依赖。

配置文件

Spring Boot支持多种配置文件格式,如YAML、Properties等。其中,application.properties(或者application.yml)是最常用的配置文件,可以在其中配置应用程序的属性、数据库信息、日志等。

自动配置

当项目依赖了某个类库时,Spring Boot会自动根据该类库进行自动配置。例如,当依赖了Spring Data JPA时,Spring Boot会自动配置JPA相关的Bean,无需手动配置。

Spring Boot的启动类

Spring Boot的应用程序需要一个主启动类,用于启动整个应用程序。在这个类上使用@SpringBootApplication注解。

控制器类

Spring Boot的控制器类使用@RestController或@Controller注解标注,支持各种HTTP请求方法,如GET、POST、PUT、DELETE等。

正在为您搜索:spring boot 示例、maven依赖配置

示例代码

示例一:Hello World

这是 Spring Boot 最简单的示例,用于演示如何创建和启动一个 Spring Boot 应用程序:

@SpringBootApplication
public class HelloWorldApplication {

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

    @RestController
    public class HelloWorldController {

        @GetMapping("/hello")
        public String hello() {
            return "Hello, Spring Boot!";
        }
    }
}

在这个示例中,我们创建了一个 Spring Boot 应用程序,并定义了一个名为"hello"的 REST 接口,访问该接口将返回字符串"Hello, Spring Boot!"。

下面是该示例的 Maven 依赖配置:

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       <version>2.5.0</version>
   </dependency>
</dependencies>

在这个依赖配置中,我们引入了 Spring Boot Web 模块的依赖,即 spring-boot-starter-web

示例二:Web 应用程序

这个示例演示如何创建一个 Web 应用程序,并定义多个 REST 接口和静态资源:

@SpringBootApplication
public class WebApplication {

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

    @RestController
    public class HelloController {

        @GetMapping("/hello")
        public String hello() {
            return "Hello, Spring Boot!";
        }
    }

    @RestController
    public class UserController {

        @Autowired
        private UserService userService;

        @GetMapping("/users")
        public List<User> getUsers() {
            return userService.getUsers();
        }
    }

    @Service
    public class UserService {

        public List<User> getUsers() {
            // 获取用户列表
        }
    }

    @Configuration
    public class WebMvcConfigurer implements WebMvcConfigurer {

        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/static/**")
                    .addResourceLocations("classpath:/static/");
        }
    }
}

在这个示例中,我们创建了一个 Web 应用程序,并定义了两个 REST 接口:"/hello"和"/users"。同时,我们还定义了一个 UserService 服务类,用于获取用户列表。最后,我们还通过 WebMvcConfigurer 配置了静态资源访问路径。

下面是该示例的 Maven 依赖配置:

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       <version>2.5.0</version>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-jpa</artifactId>
       <version>2.5.0</version>
   </dependency>
   <dependency>
       <groupId>com.h2database</groupId>
       <artifactId>h2</artifactId>
       <version>1.4.200</version>
   </dependency>
</dependencies>

在这个依赖配置中,我们引入了 Spring Boot Web 模块、Spring Data JPA 模块和 H2 数据库的依赖。

示例三:缓存

这个示例演示如何使用 Spring Boot 中集成的缓存框架进行数据缓存:

@SpringBootApplication
public class CacheApplication {

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

    @RestController
    public class UserController {

        @Autowired
        private UserService userService;

        @GetMapping("/users/{id}")
        public User getUser(@PathVariable Long id) {
            return userService.getUser(id);
        }

        @PostMapping("/users")
        public User addUser(@RequestBody User user) {
            return userService.addUser(user);
        }

        @PutMapping("/users/{id}")
        public User updateUser(@PathVariable Long id, @RequestBody User user) {
            // 更新用户信息
        }

        @DeleteMapping("/users/{id}")
        public void deleteUser(@PathVariable Long id) {
            userService.deleteUser(id);
        }
    }

    @Service
    public class UserService {

        @Cacheable(value = "userCache", key = "#id", unless = "#result == null")
        public User getUser(Long id) {
            // 获取用户信息
        }

        @CachePut(value = "userCache", key = "#result.id")
        public User addUser(User user) {
            // 新增用户信息
        }

        @CachePut(value = "userCache", key = "#user.id")
        public User updateUser(User user) {
            // 更新用户信息
        }

        @CacheEvict(value = "userCache", key = "#id")
        public void deleteUser(Long id) {
            // 删除用户信息
        }
    }
}

在这个示例中,我们定义了一个名为"User"的实体类,并通过 UserService 类提供了基本的 CRUD 操作。同时,我们使用了 Spring Boot 中集成的缓存框架,对 getUser 方法进行缓存配置。

下面是该示例的 Maven 依赖配置:

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       <version>2.5.0</version>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-jpa</artifactId>
       <version>2.5.0</version>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-cache</artifactId>
       <version>2.5.0</version>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-cache</artifactId>
       <version>2.5.0</version>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-cache</artifactId>
       <version>2.5.0</version>
   </dependency>
</dependencies>

在这个依赖配置中,我们引入了 Spring Boot Web 模块、Spring Data JPA 模块、Spring Cache 模块和 Ehcache3 缓存的依赖。

示例四:安全

这个示例演示如何使用 Spring Security 进行用户认证和授权:

@SpringBootApplication
public class SecurityApplication {

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

    @RestController
    public class HelloController {

        @GetMapping("/hello")
        public String hello() {
            return "Hello, Spring Security!";
        }

        @PostMapping("/login")
        public void login() {
            // 登录操作
        }
    }

    @Configuration
    public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                    .antMatchers("/hello").permitAll()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin().permitAll()
                    .and()
                    .logout().permitAll();
        }

        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
            auth.inMemoryAuthentication()
                    .withUser("user").password("{noop}password").roles("USER");
        }
    }
}

在这个示例中,我们定义了一个名为"HelloController"的控制器类,并通过 Spring Security 进行用户认证和授权。在 WebSecurityConfigurer 中,我们配置了访问控制、认证方式和角色权限。

下面是该示例的 Maven 依赖配置:

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       <version>2.5.0</version>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-security</artifactId>
       <version>2.5.0</version>
   </dependency>
</dependencies>

在这个依赖配置中,我们引入了 Spring Boot Web 模块和 Spring Security 模块的依赖。

总结

本文详细介绍了Spring Boot框架的优点、特性和使用方法,包括自动配置、命令行界面、Actuator、多环境支持、Spring Boot CLI等。作为一款快速开发的框架,Spring Boot简化了企业级应用的开发,同时也提高了部署效率和维护便捷性。希望本文能够帮助大家更好地了解和应用Spring Boot。