下面是 Spring Boot 的详细学习路线和代码示例。
一、Spring Boot 简介
Spring Boot 是由 Spring 官方提供的一个快速开发框架,它基于 Spring 框架,简化了 Spring 应用的开发配置和部署流程。
Spring Boot 提供了一套开箱即用的功能模块,包括 Web 应用、数据库访问、消息队列、缓存、安全等,大大减少了开发者在项目开发中的工作量。
二、Spring Boot 学习路线
Spring Boot 入门
首先,我们需要了解 Spring Boot 的基本概念和使用方法,可以通过 Spring 官方文档、视频教程等方式学习。以下是一个简单的 Spring Boot 入门示例:
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } @RestController @RequestMapping("/hello") public class HelloController { @GetMapping public String hello() { return "Hello, Spring Boot!"; } }
在这个示例中,我们创建了一个 Spring Boot 应用,并在其中定义了一个 RESTful API 接口,用于返回一个简单的字符串响应。
Spring Boot Web 开发
Spring Boot 提供了一套完整的 Web 开发框架,包括 MVC、RESTful API 等。在学习 Spring Boot Web 开发时,我们需要了解以下内容:
- Spring MVC 框架的使用方法
- RESTful API 的设计规范和使用方法
- Spring Boot 中的异常处理机制
- Spring Boot 中的数据校验机制
- Spring Boot 中的文件上传和下载
以下是一个简单的 Spring Boot Web 开发示例:
@RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping public List<User> getUsers() { return userService.getUsers(); } @PostMapping public User createUser(@RequestBody User user) { return userService.createUser(user); } @GetMapping("/{id}") public User getUserById(@PathVariable("id") Long id) { return userService.getUserById(id); } @PutMapping("/{id}") public User updateUser(@PathVariable("id") Long id, @RequestBody User user) { return userService.updateUser(id, user); } @DeleteMapping("/{id}") public void deleteUser(@PathVariable("id") Long id) { userService.deleteUser(id); } } @Service public class UserService { private List<User> users = new ArrayList<>(); public List<User> getUsers() { return users; } public User createUser(User user) { users.add(user); return user; } public User getUserById(Long id) { return users.stream() .filter(user -> user.getId().equals(id)) .findFirst() .orElseThrow(() -> new RuntimeException("User not found")); } public User updateUser(Long id, User user) { User oldUser = getUserById(id); oldUser.setName(user.getName()); oldUser.setAge(user.getAge()); return oldUser; } public void deleteUser(Long id) { users.removeIf(user -> user.getId().equals(id)); } } public class User { private Long id; private String name; private Integer age; // 省略 getter 和 setter 方法 }
在这个示例中,我们创建了一个 UserController,用于处理用户相关的 RESTful API 请求。同时,我们还创建了一个 UserService,用于处理具体的业务逻辑。这个示例展示了 Spring Boot Web 开发中常见的一些用法,包括请求参数的处理、异常处理、数据校验等。
Spring Boot 数据访问
Spring Boot 提供了一系列数据访问框架,包括 JDBC、MyBatis、JPA/Hibernate 等。在学习 Spring Boot 数据访问时,我们需要了解以下内容:
- 数据访问框架的使用方法
- 数据库连接池的配置和使用
- 事务管理的使用方法
- 数据库表结构的设计和迁移工具的使用方法
以下是一个简单的 Spring Boot 数据访问示例:
@Repository public class UserRepository { @Autowired private JdbcTemplate jdbcTemplate; public List<User> getUsers() { return jdbcTemplate.query("SELECT * FROM user", (rs, rowNum) -> { User user = new User(); user.setId(rs.getLong("id")); user.setName(rs.getString("name")); user.setAge(rs.getInt("age")); return user; }); } public User createUser(User user) { KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update(connection -> { PreparedStatement ps = connection.prepareStatement("INSERT INTO user (name, age) VALUES (?, ?)", Statement.RETURN_GENERATED_KEYS); ps.setString(1, user.getName()); ps.setInt(2, user.getAge()); return ps; }, keyHolder); user.setId(keyHolder.getKey().longValue()); return user; } public User getUserById(Long id) { return jdbcTemplate.queryForObject("SELECT * FROM user WHERE id = ?", new Object[]{id}, (rs, rowNum) -> { User user = new User(); user.setId(rs.getLong("id")); user.setName(rs.getString("name")); user.setAge(rs.getInt("age")); return user; }); } public User updateUser(Long id, User user) { jdbcTemplate.update("UPDATE user SET name = ?, age = ? WHERE id = ?", user.getName(), user.getAge(), id); user.setId(id); return user; } public void deleteUser(Long id) { jdbcTemplate.update("DELETE FROM user WHERE id = ?", id); } }
在这个示例中,我们使用了 Spring Boot 的 JdbcTemplate 访问数据库,并定义了一系列数据访问操作,包括查询、插入、更新和删除等。
Spring Boot 安全
Spring Boot 提供了一套安全框架,用于保护应用程序的安全性。在学习 Spring Boot 安全时,我们需要了解以下内容:
- 安全框架的使用方法
- 用户认证和授权的实现方法
- CSRF 和 XSS 攻击的防范方法
以下是一个简单的 Spring Boot 安全示例:
@Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/api/**").authenticated() .anyRequest().permitAll() .and() .formLogin() .and() .httpBasic() .and() .csrf().disable(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER") .and() .withUser("admin").password("{noop}password").roles("USER", "ADMIN"); } } @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/hello") public String hello() { return "Hello, Spring Boot Security!"; } }
在这个示例中,我们创建了一个 WebSecurityConfig 类,用于配置 Spring Boot 的安全框架。我们定义了两个用户,一个是普通用户,一个是管理员用户,并且通过配置 antMatchers 来保护了 /api/** 的访问权限。在 ApiController 中,我们定义了一个需要认证才能访问的接口。