目录
4. @Component,@Repository,@Service,@Controller
13. @PathVariable和@RequestParam
1.@SpringBootApplication
这个注解是SpringBoot的基石,创建SpringBoot项目默认在主类上加。可以把@SpringBootApplication看作@Configuration + @EnableAutoConfiguration + @ComponentScan
这三个注解的作用分别是:
- @Configuration:允许spring上下文中注册额外的bean或导入其他配置类。
- @EnableAutoConfiguration:启动SpringBoot自动装配。
- @ComponentScan:扫描被@Component(@Repository,@Servie,@Controller)注解的bean,注解默认会扫描该类所在包下所有类。
2. @Autowired
自动导入对象到类中,被注入进的类同样要被Spring容器管理,如:Service类注入到Controller类
默认按类型装配,如果我们想用名称装配,可以结合@Qualifier注解使用。
- @Autowired可以作用在变量,setter方法,构造函数上。
3. @Resource
与@Autowired类似 都是注入bean的注解,但@Autowire默认按照类型匹配,如果需要按照名称匹配需要与@Qualifier一起使用,@Resource默认按照名称匹配,名称匹配不到再根据类型匹配。
4. @Component,@Repository,@Service,@Controller
我们一般使用@Autowired注解让Spring容器帮我们自动装配bean,想把类表示成可用于@Autowired注解自动装配的bean类,可以使用以下注解:
- @Component:通用的注解,可以标注任意类为Spring组件。如果bean不知道属于哪一层可以使用这个注解。
- @Repository:对应持久层即Dao层,主要用于数据库相关操作。
- @Service:对应服务层,主要涉及一些复杂的逻辑,需要用到Dao层。
- @Controller:对应SpringMVC控制层,主要用于接受用户请求并调用Service层返回数据给前端页面
5. @RestController
@RestController是@Controller和@ResponseBody合集,用户标记控制器类,一般用于实现RESTful API接口服务,与传统的控制器不同,使用@RestController注解的控制器会将响应体直接返回给客户端。它可以方便地处理数据返回和异常处理等功能,同时也可以充分发挥SpringBoot优势,简化开发,提高效率。
以下是使用场景:
@RestController
public class UserController {
@Autowired
private UserService userService;
/**
* 根据用户 ID 获取用户信息
* @param id 用户 ID
* @return 用户信息
*/
@GetMapping("/user/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
User user = userService.getUserById(id);
if (user == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(user);
}
}
6. @Scope
声明SpringBean的作用域,在Spring容器中bean的作用域决定了bean实例的生命周期和可见范围,而@Scope就是来指定这些作用域:
- Singleton(单例):容器中只有一个实例,每次获取时都返回同一个对象。
- Prototype(原型):每次获取时都会创建一个新的实例。
- Requtest(请求):每个HTTP请求对应一个bean实例,在同一个请求中多次获取则返回同一个实例。
- Session(会话):每个用户会话对应一个bean实例,同一个用户会话中多次获取则返回同一个实例。
- GlobalSession(全局会话):只在基于Portlet架构的Web应用使用,表示整个Portlet应用只有一个实例。
以下是使用方式:
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class PrototypeBean {
// ...
}
7. @Configuration
一般用来声明配置类,通过@Configuration标记的配置类会被SpringIOC容器扫描,并将其中的bean定义加入到容器中,供其他bean调用
8. 5种常见的请求类型
- GET:请求从服务器获取资源。GET /users(获取所有学生)
- POST:服务器创建一个新资源。POST /addUser(添加学生)
- PUT:更新服务器资源。PUT /updateById/12
- DELETE:从服务器删除特定资源。DELETE /delUserById/15
- PATCH:更新服务器资源。(使用很少)
9. GET请求
@GetMapping("users")等价于@RequestMapping(value="/users",method=RequestMethod.GET)
10. POST请求
@PostMapping("addUser")等价于@RequestMapping(value="/addUser",method=RequestMethod.POST)
11. PUT请求
@PutMapping("/updateById/{userId}")等价于@RequestMapping(value="/updateById/{userId}",method=RequestMethod.PUT)
12. DELETE请求
@DeleteMapping("/delUserById/{userId}")等价于@RequestMapping(value="/delUserById/{userId}",method=RequestMethod.DELETE)
13. @PathVariable和@RequestParam
@PathVariable用于获取路径占位符的变量,常用于RESTful接口中
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
// ...
}
@RequestParam用于获取请求参数值,可以指定默认值,是否必填等
@GetMapping("/users")
public List<User> getUserList(@RequestParam(required = false, defaultValue = "1") Integer pageNo,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
// ...
}
14. @RequestBody
@RequestBody用于获取HTTP请求体中的参数值,通常POST,PUT,PATCH请求使用。也提供了对各种数据的支持,包括JSON,XML,文本等格式数据。
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// ...
}
注意:一个请求方法只可以有一个@RequestBody,可以有多个@RequestParam和@PathVariable。
15. Value(常用)
使用@Value读取yml配置文件内容
@Value("${app.name}")
private String appName;
16. @ConfigurationProperties
用于将配置文件中的属性注入到Javabean,通过这个注解可以把一组相关的属性统一配置到一个对象,并进行使用。
@ConfigurationProperties(prefix = "app")
@Component
public class AppConfig {
private String name;
private String version;
// Getter and setter methods...
}
17. 字段验证的注解
@NotEmpty:被注释的字符串不能为null和空
@NotBlank:被注释的字符串非null,且必须包含一个非空字符
@Null:被注释的元素必须为null
@NotNull:被注释的元素不为null
@AssertTrue:被注释的元素为true
@AssertFalse:被注释的元素必须为false
@Email:被注释的元素为Email格式
@Min(value):被注释的元素必须是数字,值必须大于等于value
@Max(value):被注释的元素必须是数字,值必须小于等于value
@Size(max=v1,min=v2):被注释的元素值在指定范围内
......
18. Controller异常注解
- @ControllerAdvice:注解定义全局异常处理类
- @ExceptionHandler:注解声明异常处理方法
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
/**
* 请求参数异常处理
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest request) {
......
}
}
19. 创建数据库中的表
- @Entity:声明一个类对应数据库的一个实体
- @Table:设置表明
@Entity
@Table(name = "role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
省略getter/setter......
}
20. @Id
使用@Id
声明之后,我们还需要定义主键的生成策略。我们可以使用 @GeneratedValue
指定主键生成策略
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
21. @Column
@Column:声明字段
设置属性userName对应的数据库字段名为user_name,长度为32,非空
@Column(name = "user_name", nullable = false, length=32)
private String userName;
22. @Transactional
在要开启事务的方法使用@Transactional注解
@Transactional(rollbackFor = Exception.class)
public void save() {
......
}
23. @JsonFormat
一般用来格式化json数据
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone="GMT")
private Date date;
24. 缓存
- @EnableCaching:开启缓存配置
- @CacheConfig:提供公共缓存配置
- @Cacheable:在方法或类上,缓存方法或类的返回值
- @CachePut:先执行方法,再将结果缓存
- @CacheEvict:删除缓存
- @Caching:可以配置@Cacheable,@CachePut,@CacheEvict
25. @CrossOrigin
@CrossOrigin 是 Spring 框架中用于处理跨域请求的注解。当客户端(浏览器)发起一个跨域请求时,服务端需要允许跨域访问,否则会因为同源策略而拒绝请求,这时就可以通过使用 @CrossOrigin 注解来设置响应头,允许请求进行跨域访问。
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/hello")
@CrossOrigin(origins = "http://localhost:8080")
public String hello() {
return "Hello World!";
}
}
26. @ComponentScan
@ComponentScan用于自动扫描并加载组件的注解,用于指定被扫描的包或路径,将其中带有@Component以及派生注解的组件(@Controller,@Service,@Repository等)自动加载到容器。
@Configuration
@ComponentScan(basePackages = {"com.mycompany"})
public class AppConfig {
// 配置其他 Bean...
}