什么是Spring Boot 注解
Spring Boot 注解是 Spring Boot 框架中的核心部分,它们用于简化配置和执行特定的编程任务。这些注解通常分为几个类别,包括用于 MVC 层的类注解、依赖注入注解、Web 开发常用注解、Spring Boot 常用注解、面向切面编程(AOP)注解、测试相关注解以及其他常用注解。
MVC 层类注解
在 Spring Boot 的 MVC 模式中,有几个关键的类注解用于定义不同层次的组件:
-
@Controller:用于标记控制层的组件,处理 HTTP 请求。
-
@Service:应用于服务层,包含业务逻辑。
-
@Repository:用于标记数据访问层,即 DAO 组件。
-
@Component:泛指组件,当组件不易归类时使用。
依赖注入注解
依赖注入注解用于自动装配 Spring 应用程序中的 Bean:
-
@Autowired:按类型自动注入。
-
@Resource:可以按名称或类型注入。
-
@Value:用于注入基本类型和 String 类型的属性。
Web 开发常用注解
Web 开发中常用的注解包括:
-
@RequestMapping:映射 HTTP 请求到控制器方法。
-
@RequestParam:绑定请求参数到方法参数。
-
@PathVariable:绑定路径变量到方法参数。
-
@ResponseBody 和 @RequestBody:用于请求和响应的体处理。
-
@RestController :组合了 @Controller 和 @ResponseBody,用于 RESTful Web 服务。
-
@ControllerAdvice 和 @ExceptionHandler:用于全局异常处理。
Spring Boot 常用注解
Spring Boot 提供了一些注解来简化配置和自动配置:
-
@SpringBootApplication:标记主程序类,开启自动配置。
-
@EnableAutoConfiguration:开启自动配置功能。
-
@Configuration:标记配置类,相当于传统的 XML 配置文件。
-
@ComponentScan:自动扫描并加载符合条件的组件或 Bean。
案例解释
1.@Controller
表示此类为控制器类 需要与其他注解配合使用 返回html页面, 走的是视图解析内容
相关展示
View.html中代码
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的页面</title>
</head>
<body>
<div>我的页面</div>
<hr>
</body>
</html>
2.@RequestMapping
@RequestMapping("/view") 请求映射注解 配置显示的路由
java
@Controller
public class ViewController {
@RequestMapping("/view")
public String view(){
return "view.html";
}
}
http://localhost:8080/view 配置路由 配合**@Controller展示**
配合模板使用
java
@RequestMapping("data")
public ModelAndView data(){
ModelAndView mv=new ModelAndView(PAGE); //可携带参数
mv.addObject("str1" ,"我叫hello");//需要添加模版依赖
mv.addObject("str2","我是张三");
return mv;
}
需要配合freemarker来进行
要配置相关信息 添加依赖
java
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
3.@RequestParam
用于设置URL上参数并收集数据
java
public static final String PAGE= "parma.html";
@RequestMapping("/parma")
public ModelAndView parma(@RequestParam(value = "id",defaultValue = "0",required = false) int id,
@RequestParam(value = "type",defaultValue = "1")String type){
ModelAndView modelAndView = new ModelAndView(PAGE);
modelAndView.addObject("id", id);
return modelAndView;
}
这里设置了参数 id & type
http://localhost:8080/parma?id=10&type=2
可以通过前端可以通过id,type进行传参
4.@PathVariable
设置多级路由
java
@Controller
public class ParamsController {
public static final String PAGE= "parma.html";
@RequestMapping("/parma/{id}/{type}")
public ModelAndView parma(@PathVariable(required = false) int id,
@PathVariable(required = false)String type){
System.out.println("id:"+id);
System.out.println("type:"+type);
ModelAndView modelAndView = new ModelAndView(PAGE);
modelAndView.addObject("id", id);
return modelAndView;
}
}
请求地址http://localhost:8080/parma/10/20
5.@RestController
1.返回的是输出结果,如json,是提供前端获取数据,提交数据
2.结合@RequestMapping,GetMapping,@PostMapping
java
@RestController
@RequestMapping("rest") //查询数据
public class RestFullController {
@GetMapping("get") //http://localhost:8080/rest/get
public String get(){
return "i am here"; //直接将字符串显示到页面上
}
}
java
还可以直接返回一个对象 为字典形式展示
@RestController
@RequestMapping("rest")
public class RestFullController {
@GetMapping("get") //http://localhost:8080/rest/get
public UserRequest get(){
UserRequest userRequest = new UserRequest("张三",19,"男");
return userRequest;
} 返回{name:"张三",age:19,sex:"男"}
}
@GetMapping("{id}")
public UserRequest getById(@PathVariable("id") int id){
UserRequest use=new UserRequest(id,18,"男");
return use;
}
6.@PostMapping
java
@PostMapping //新增数据 前端传递一个UserRequest对象数据
public UserRequest post(@RequestBody UserRequest userRequest){
System.out.println(userRequest);
return userRequest;
}
7.@RequestBody
因为从前端传回来的数据对象UserRequest是一个请求体 所以要用@RequestBody
进行修饰 绑定到形参上 后端也要用一个对象接收
8.@ResponseBody
@ResponseBody不走视图解析,直接显示内容
java
@Controller
public class ParamsController {
public static final String PAGE= "parma.html";
@GetMapping("parma/get")
@ResponseBody //如果没有这个就会请求不到数据
public UserRequest getUser(){
UserRequest userRequest = new UserRequest("100",120,"男");
return userRequest;
}
}
@Controller配合@ResponseBody使用 :
也就是:@Controller+@ResponseBody=@RestContoller
9.@CrossOrigin
用于解决跨域问题
10.@Service
注册bean
11.@Autowired
获取bean 就不需要用 new了
12.@Component
也是bean注册 组件
13.@Resource
java
@Resource(name="接口name")
用于实现接口实例化
@Resource(name="adminServiceImpl")
private UserService userService;
14.@Qualifier
需要配合@Autowired 指定
@Autowired
@Qualifier("admin")
@Resource=@Autowired+@Qualifier
总的来说
1.如果接口实现只有一个那么用@Autowired就可以了,也不需要指定名字
2.如果接口实现有多个,用@Resource,并指定name(建议)
3.或者使用@Autowired+@Qualifier
15.@Configuration+@Bean
用于手动注册bean对象
16.@Values
从配置文件中取参数
在application.properies中配置信息
java
@Value("${view.username}")
private String username;
@Value("${view.page}")
private String page;
这样就可以直接拿到配置中的参数