开发常用注解简介

Spring系

预备理解

bean注入,自动装配

首先了解一下IOC操作Bean管理,bean管理是指(1)spring创建对象 (2)spring注入属性。

当我们在将一个类上标注@Service或者@Controller或@Component或@Repository注解之后,spring的组件扫描就会自动发现它,并且

会将其初始化为spring应用上下文中的bean。

bean是计算机自动生成的类,bean是一个由Spring IoC容器实例化、组装和管理的对象

当需要使用这个bean的时候,例如加上@Autowired注解的时候,这个bean就会被创建。而且初始化是根据无参构造函数。

dao

DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。对外提供相应的接口

三层架构mvc

MVC是Model-View-Controller的简称,即模型-视图-控制器。java web中我们使用三个文件夹:Controller,Service,Dao来构建mvc

实现bean注入 @Component

作用就是实现bean的注入(也就是将标注@Component注解的类交由spring管理),id默认为类的小写

在Java的web开发中,提供3个@Component注解衍生注解(功能与@component一样)分别是:

@Repository

作用于dao层,实现dao访问

@Service

作用于service层

@Controller

作用于controller层

自动装配bean @Autowired与@Resources

@Autowired

spring提供,使用前需要先配置注解的支持

@Autowired可以标注在属性上、方法上和构造器上,来完成自动装配。

注解注入时首先根据byType注入,当接口存在多个实现类且使用@Service注解的默认bean名字时,根据byName注入。在进行byName时,如果bean_id都不是set方法后面的值(setDog,结果id为dog222),可以额外加上注解

@Resources

这个是java自带的,不用导入配置支持

是先byName再byType。可以通过@Resource(name="xxxx")来指定

@ResponseBody

将java对象转为json格式的数据,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中

简短截说就是指该类中所有的API接口返回的数据,甭管你对应的方法返回Map或是其他Object,它会以Json字符串的形式返回给客户端

@RestController

@RestController 是@Controller和@ResponseBody 的结合

@Configuration

@Configuration是Spring的注解,不是SpringBoot的!早在Spring框架的时候就有使用,但是由于那个时候配置文件还是比较流行,因此@Configuration注解并没有太盛行,甚至很多人就认为它是SpringBoot的注解

作用:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象

@RequestMapping

可以用于类或者方法,用来使url能够请求到当前实现类的当前方法

@RequestMapping("/testRequest")
public String testRequest(){
    return "success";
}

SpringMVC以前版本的@RequestMapping

如果我们想使用传统的@RequestMapping注释实现URL处理程序,那么它应该是这样的:

@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET)

新方法可以简化为:

@GetMapping("/get/{id}")

到了新版本被下面新注释替代,相当于增加的选项:

@GetMapping

用于处理请求方法的GET类型

@PostMapping

用于处理请求方法的POST类型

@PutMapping

@DeleteMapping

@PatchMapping

@PathVariable

为了配合@RequestMapping系进行占位

主要作用:映射URL绑定的占位符

@RequestMapping("/user/{id}")
public String testPathVariable(@PathVariable("id") String id){
    System.out.println("路径上的占位符的值="+id);
    return "success";
}

假如你的请求为localhost:8080/user/admin,可以输出:

路径上的占位符的值=admin

@RequestParam

如果不使用RestFul风格,Controller实现类的方法的参数要使用@RequestParam 固定前端接收的变量名(如果不这样,url中参数变量名错误不会报错,仍然会转发,只不过参数值为null

@Controller
@RequestMapping("/anno")
public class AnnoController {
    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(value="name") String username){
        System.out.println("执行了...");
        System.out.println(username);
        return "success";
    }

如果现在访问localhost:8080/.../anno/testRequestParam?name=zaughter

则显示结果为执行了...zaughter

@ConfigurationProperties

直接看例子,例子来源自我的另一篇文章SpringBoot - Zaughter - 博客园 (cnblogs.com)

实体类

/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

yaml配置

person:
  name: qinjiang
  age: 3
  happy: false
  birth: 2000/01/01
  maps: {k1: v1,k2: v2}
  lists:
   - code
   - girl
   - music
  dog:
    name: 旺财
    age: 1

新增依赖(可以不配置)

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

test

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    Person person; //将person自动注入进来

    @Test
    public void contextLoads() {
        System.out.println(person); //打印person信息
    }

}

用于数据校验

常用注解

@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
    
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
    
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 Date 和 Calendar 对象是否在当前时间之前  
@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则

.......等等
除此以外,我们还可以自定义一些数据校验规则
posted @ 2023-01-22 20:09  Zaughter  阅读(27)  评论(0编辑  收藏  举报