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)

 

posted @ 2021-02-23 14:30  青杨风2199  阅读(155)  评论(0编辑  收藏  举报