Spring注解开发
@Annotation注解
注解,也叫元数据。包、类、方法、局部变量(package, class, method, field)... 前面声明
注解可以被其他程序(比如:编译器)读取;是一种额外的辅助信息;
注解通过反射机制 来读取注解
IOC(Bean)相关:
@RestController // 写在Controller类之前,用于前后端分离JSON/XML形式数据 // 相当于下面5个:
@Target (ElementType.TYPE)
@Retention (RetentionPolicy.RUNTIME)
@Documented 公共API会被工具文档化
@Controller
@ResponseBody
@AutoWired // 写在实例化之前,让容器帮我们自动装配bean(与@Service@RestController@Repository相对应)
@Component 泛指组件(3层3类),一般用在公共的方法
@Resource
@Repository 对应持久层即Dao层,主要用于数据库相关操作
@Service 对应服务层,主要涉及一些复杂的逻辑,需要用到Dao层
@Controller(前后端分离一般不单独用这个,而用RestController) 对应控制层,主要用户接受用户请求并调用Service层返回数据给前端页面
@Conditional 根据代码中设置的条件,装载不同的 bean
@Bean
@Score 声明 Bean的作用域(4种):singleton /prototype /request /session
@Configuration 配置类前,申明用
处理HTTP请求:
@RequestMapping("/...") //总的url
@PostMapping("/...") //针对具体接口,写在每一个方法前 //根据具体情况,如save就没有url
@GetMapping("/...")
@PutMapping("/...") //追加
@DeleteMapping("/...")
//下面2个都是在方法的参数括号中:
@RequestParam
@RequestBody
@PathVariable 路径变量
ps:一个请求方法只可以有一个@RequestBody(JSON);但可以有多个@RequestParam和@PathVariable
@SpringBootApplication 这个注解是SpringBoot 项目的基石,创建SpringBoot项目后会默认在主类加上。
等价于@Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的 main 类:
@Configuration
@EnableAutoConfiguration 自动配置;类级别
@ComponentScan
@Controller , @Service , @Repository ==》3类component
读取配置:
@Value("${app.filePath}") //读取比较简单的配置信息
@ConfigurationProperties //读取配置信息并与bean绑定
参数校验:
https://blog.csdn.net/weixin_43671737/article/details/108578122
https://blog.csdn.net/qq_21187515/article/details/109673109
https://segmentfault.com/a/1190000023471742
常用的字段验证:
@NotEmpty @NotNull @NotBlank
@AssertFalse @AssertTrue 必须为正/负
@Pattern(regex=,flag=) 正则表达式
@Min @Max @Digits(integer, fraction)
验证请求体(RequestBody):
@Valid
如果验证失败,将抛出MethodArgumentNotValidException
验证 PathVariable、RequestParam :
要在类前加上@Validated注解;然后再在需要验证的数据前加上@Valid
全局处理Controller异常:
@ControllerAdvice
@ExceptionHandler
注解声明异常处理方法
JPA相关(java持久层API)
@Entity:class对应数据库实体
@Table:设置表名
@Id:表明字段为主键
@GeneratedValue (strategy=GenerationType....) 主键生成策略
TABLE表来保存主键 SEQUENCE序列机制生成主键 IDENTITY自增长 AUTO引擎帮助三选一
@Column 声明字段
@Transient 指定不持久化特定字段
@Lob 声明大字段(最多4GB)
事务@Transactional
@Transactional一般用于class和method;当method单独说明时,会覆盖class的
JSON数据处理
过滤JSON数据:
@JsonFormat用于格式化json数据:
@JsonUnwrapped 扁平化对象:
扁平化后:
测试相关
@Test 测试method @Transactional回滚避免污染测试数据 @WithMockUser模拟真实用户
3个内置注解:
@Override // 重写父类的方法
@Deprecated // 不推荐使用,但可以使用
@SuppressWarnings // 镇压警告
4个元注解(为其他注解作说明):
@Target //被描述的注解可以用在什么地方; FIELD 字段、METHOD 方法、TYPE接口/类/枚举
@Retention (SOURCE < CLASS < RUNTIME) 一般都用RUNTIME表示在运行时可以看到
@Documented
@Inherited
@interface 是自定义注解的声明
【实例】
1)自定义注解:
2)使用注解:
lombok 插件 :
使用步骤:
1. 在IDEA中安装lombok插件
2. Maven中导入lombok的jar包
3. 在实体类(Do)上加注解即可
有参构造/无参构造:
lombok特点:虽然简便,但是可读性下降;舍弃一定的规范,获取方便;
使用注解开发:
注解开发是为了帮助:面向接口编程
面向接口编程:
根本原因是" 解耦 ":定义与实现分离(例如service和serviceImpl,dao和mapper.xml)