前言
在Spring Boot的广阔生态中,属性注入与Web开发是两个至关重要的领域。本指南将引领您深入探索Spring Boot的属性注入机制,从基础的概念理解到实际应用中的多种方法,帮助您轻松实现配置信息的动态管理。此外,我们还将聚焦Spring Boot在Web开发中的快速实现能力,特别是通过SpringMVC框架的整合,展示如何以最小化的配置快速搭建起功能完备的Web应用。无论您是Spring Boot的新手,还是希望提升开发效率的资深开发者,本指南都将为您提供丰富的实战经验和深入的技术解析,助您在Spring Boot的旅途中更加游刃有余。
1、springboot属性注入
1.1 属性注入
如下图新建beans文件夹,并且新建User类和Address类:
写入如下代码:
User类:
package com.example.demo.beans;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
@Component
// @ConfigurationProperties 常用于bean属性和配置文件的绑定,通过prefix可以指定配置文件中某一个节点,该节点中的子节点将自动和属性绑定
@ConfigurationProperties(prefix="user")
public class User {
// 可以通过@Value + SPEL 直接绑定springboot配置文件中的值 或者 直接写prefix="user"就不用一个个配置了。
// @Value("${user.username}")
private String username;
private Integer age;
private Date birthday;
private List<String> hobbies;
private Map<Integer, String> girlFriend;
private Address address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public List<String> getHobbies() {
return hobbies;
}
public void setHobbies(List<String> hobbies) {
this.hobbies = hobbies;
}
public Map<Integer, String> getGirlFriend() {
return girlFriend;
}
public void setGirlFriend(Map<Integer, String> girlFriend) {
this.girlFriend = girlFriend;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", age=" + age +
", birthday=" + birthday +
", hobbies=" + hobbies +
", girlFriend=" + girlFriend +
", address=" + address +
'}';
}
}
Address类:
package com.example.demo.beans;
public class Address {
private Integer id;
private String desc;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
application.properties写入:
server.port = 8088
spring.profiles.active = dev
user.username = Jack
user.age = 18
user.birthday = 2004/01/01
user.hobbies[0] = code
user.hobbies[1] = singsong
user.girlFriend.18 = Jane
user.address.id = 1
user.address.desc = Amoy
如下图写入:
package com.example.demo;
import com.example.demo.beans.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Autowired
private User user;
@Test
void contextLoads() {
System.out.println(user);
}
}
我们运行这个DemoApplicationTests效果如下:
1.2 更多使用方法
可以看到这边属性注入已经接收到了。
另外在application.properties中可以使用表达式${}
去引用上面的值。
更多使用,以及随机值可以看Configuring Random Values。
1.3 数据校验
依赖:
pom.xml写入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
NotNull选择Javax里的。
User类中注解:
运行报错就出来了不允许为空:
2、springboot快速开发web
可以参考这篇文章,进行快速初始化springboot web。
2.1、SpringMVC快速使用
在java
文件夹下的com.example.demo
创建entity
文件夹,并且创建User
类,写入:
package com.example.demo.entity;
public class User {
private Integer id;
private String username;
private String address;
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", address='" + address + '\'' +
'}';
}
public User(Integer id, String username, String address) {
this.id = id;
this.username = username;
this.address = address;
}
public User() {
}
}
我们先用map
来映射查询关系,后续将改成MyBatis
整合
在java
文件夹下的com.example.demo
创建service
文件夹,并且创建UserService
类,写入:
package com.example.demo.service;
import com.example.demo.entity.User;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class UserService {
private static Map<Integer, User> users = new HashMap<>();
static {
users.put(1, new User(1, "Jack", "Beijing"));
users.put(2, new User(2, "Mary", "Beijing"));
users.put(3, new User(3, "Jane", "Shanghai"));
users.put(4, new User(4, "Michael", "Shanghai"));
}
/**
* 根据id查询用户
* @param id
* @return
*/
public User getUserById(Integer id) {
return users.get(id);
}
/**
* 根据id查询所有用户
* @return
*/
public List<User> getAllUser() {
return new ArrayList(users.values());
}
/**
* 更新用户
* @param user
* @return
*/
public void update(User user) {
users.replace(user.getId(), user);
}
/**
* 新增用户
* @param user
* @return
*/
public void add(User user) {
Integer newId = users.size()+1;
user.setId(newId);
users.put(newId, user);
}
/**
* 删除用户
* @param user
* @return
*/
public void delete(Integer id) {
users.keySet().removeIf(key -> key == id);
}
}
在java
文件夹下的com.example.demo
创建controller
文件夹,并且创建UserController
类,写入:
package com.example.demo.controllers;
import com.example.demo.entity.Result;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
// Rest /user/1
@Autowired
UserService userService;
// 查询 /user/1
@GetMapping("/{id}")
public Result getUser(@PathVariable Integer id) {
System.out.println(id);
User user = userService.getUserById(id);
return new Result<>(200, "查询成功", user);
}
// 新增 /user/add
@PostMapping("/add")
public Result addUser(@RequestBody User user) {
userService.add(user);
return new Result<>(200, "添加成功");
}
// 修改 /user/1
@PutMapping("/{id}")
public Result editUser(@RequestBody User user) {
userService.update(user);
return new Result<>(200, "修改成功");
}
// 删除 /user/1
@DeleteMapping("/{id}")
public Result deleteUser(@PathVariable Integer id) {
userService.delete(id);
return new Result<>(200, "删除成功");
}
}
测试效果:
在学习springboot的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。