SpringBoot 中使用到的部分注解
[toc]
@Component 注解
1 2 3 4
| @Component public class CorsFilter implements Filter{
}
|
- @Component 是 Spring 框架中的一个注解,用于标记一个类为 Spring 的组件。
- 当 Spring 应用启动时,它会自动扫描项目中所有的 @Component 注解的类,并创建它们的实例,这些实例会被 Spring 容器管理。
- 代码中,@Component 注解被用在 CorsFilter 类上,这意味着 CorsFilter 的实例会被 Spring 容器自动创建并管理。这样,就可以在其他需要使用 CorsFilter 的地方,通过依赖注入(例如使用 @Autowired 注解)来获取 CorsFilter 的实例,而不需要手动创建 CorsFilter 的实例。
@SessionAttributes
@SessionAttributes
是 Spring MVC 提供的一个注解,用于将模型中的某些属性暂存到 HTTP Session 中,以便在多个请求之间共享数据。
作用
@SessionAttributes("tacoOrder")
的作用是将名为 tacoOrder
的模型属性存储到 HTTP Session 中,这样在后续的请求中可以继续访问和修改这个属性,而不需要每次都重新创建它。
使用场景
通常在处理多步骤表单提交时会用到这个注解。例如,一个用户在填写订单时,可能需要分多个步骤填写不同的信息。使用 @SessionAttributes
可以在每个步骤之间共享订单对象,直到订单完成。
示例
1. 创建一个 TacoOrder
类
1 2 3 4 5 6 7 8 9 10
| import lombok.Data;
@Data
public class TacoOrder { private String name; private String address; private String tacoType;
}
|
2. 创建一个控制器,使用 @SessionAttributes
- **
@SessionAttributes("tacoOrder")
**:将名为 tacoOrder
的模型属性存储到 HTTP Session 中。
showOrderForm
方法:初始化一个新的 TacoOrder
对象并添加到模型中,如果模型中还没有该对象。
processOrder
方法:处理订单的第一步,并重定向到第二步。
showOrderStep2Form
方法:显示订单的第二步表单,tacoOrder
对象从会话中注入。
processOrderStep2
方法:处理订单的第二步,并使用 SessionStatus.setComplete()
方法清除会话中的 tacoOrder
属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.bind.support.SessionStatus; import org.springframework.web.bind.annotation.ModelAttribute;
@Controller @SessionAttributes("tacoOrder") public class TacoOrderController {
@GetMapping("/order") public String showOrderForm(Model model) { if (!model.containsAttribute("tacoOrder")) { model.addAttribute("tacoOrder", new TacoOrder()); } return "orderForm"; }
@PostMapping("/order") public String processOrder(@ModelAttribute TacoOrder tacoOrder) { return "redirect:/orderStep2"; }
@GetMapping("/orderStep2") public String showOrderStep2Form(@ModelAttribute TacoOrder tacoOrder) { return "orderStep2Form"; }
@PostMapping("/orderStep2") public String processOrderStep2(@ModelAttribute TacoOrder tacoOrder, SessionStatus sessionStatus) { System.out.println("Order submitted: " + tacoOrder);
sessionStatus.setComplete(); return "redirect:/orderSuccess"; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Order Form</title> </head> <body> <form action="#" th:action="@{/order}" th:object="${tacoOrder}" method="post"> <label for="name">Name:</label> <input type="text" id="name" th:field="*{name}" /><br/>
<label for="address">Address:</label> <input type="text" id="address" th:field="*{address}" /><br/>
<button type="submit">Next Step</button> </form> </body> </html>
|
@ConfigurationProperties
@ConfigurationProperties 注解的作用是将配置文件(如 application.yml 或 application.properties)中的属性映射到一个 Java 类中。这使得可以在代码中轻松访问和管理这些配置属性。
1 2 3 4 5 6 7
| aliyun: oss: endpoint: accessKeyId: accessKeySecret: bucketName:
|
读取这些配置
1 2 3 4 5 6 7
| @ConfigurationProperties("aliyun.oss") public class OssUtil { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; }
|