引言

Java注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。通俗理解为标签。

注解的使用场景:

  1. 提供信息给编译器: 编译器可以利用注解来探测错误和警告信息
  2. 编译阶段时的处理: 软件工具可以用来利用注解信息来生成代码、Html文档或者做其它相应处理。


注解本质上就是一个类,开发中我们可以使用注解取代 xml配置文件。


  1. 运行时的处理: 某些注解可以在程序运行的时候接受代码的提取

注解与反射:注解通过反射获取。首先可以通过 Class 对象的 ​​isAnnotationPresent() ​​方法判断它是否应用了某个注解


JAVA反射机制是​​在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法​​​;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java常用注解_spring


I RequestMapping注解

开箱即用,Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。

作用:将请求和处理请求的控制器方法关联起来,建立映射关系。即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上。

  1. 标识类:设置映射请求的请求路径的初始信息,方法的请求地址是相对类的请求地址而言的。
  2. 标识方法:设置映射请求的请求路径的具体信息,方法的请求地址是绝对路径。

标识类的代码实例:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class LoggerTest {

@GetMapping("/test1")
public void test1() {
}

}

1.1 处理多个 URI

​@RequestMapping​​ 可以处理多个 URI


到 /,/index,/index.html 的请求都会跳转到index页面


@RestController
@RequestMapping({"/","/index","index.html"} )
public class IndexController {

String indexMultipleMapping() {
return "index";
}
}

1.2 指定请求的method类型

​@RequestMapping​​指定请求的method类型

@RequestMapping(value = "/list" , method = RequestMethod.POST)
public Str post(){
return post;
}

}

1.3 指定params内容

例子:必须包含username 和age两个参数,且age参数不为10 (可以有多个参数)

@RequestMapping(value = "/list" , method = RequestMethod.POST,params = { "username","age!=10" })
public JSONObject list(@PathVariable String communityId) {
JSONObject object = new JSONObject();
object.put("communityId",communityId);
return object;
}

1.4 地址是uri变量

​@RequestMapping​​​的地址可以是uri变量,并且通过​​@PathVariable​​注解获取作为方法的参数。也可以是通配符来筛选请求地址。

@GetMapping("selectAllPlusSql/{name}")
@ResponseBody
@Log(operationType = "selectAll", operationName = "通过MyBatis查找")
public R selectAllPlusSql(@PathVariable("name") String name){
List<Warehouse> list = warehouseService.selectAllPlusSql();
TestDemo.logger.info("=selectAllPlusSql");
return R.ok().data("warehouseList",list);
}

1.5 将请求参数绑定控制器的方法参数上

​@RequestParam​​:将请求参数绑定到你控制器的方法参数上


是springmvc中接收普通参数的注解


II @RestController

@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,也就是无法重定向指定页面。

@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中。

@Controller 进行页面跳转的时候,推荐使用完整的路径,不用相对路径。

III @Valid

用于验证注解是否符合要求,直接加在变量之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。

然后后面得跟上 BindingResult

@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping
public User create (@Valid @RequestBody User user,BindingResult bindingResult) {
///.....

if (bindingResult.hasErrors()) {
String error = bindingResult.getFieldError().getDefaultMessage();
return ServiceApiResult.error(error);
}

return user;
}
}

在实体类中添加相关验证信息的注解

public class User {

@NotBlank(message = "密码不能为空")
private String password;
}

其他验证信息

限制

说明

@Null

限制只能为null

@NotNull

限制必须不为null

@AssertFalse

限制必须为false

@AssertTrue

限制必须为true

@DecimalMax(value)

限制必须为一个不大于指定值的数字

@DecimalMin(value)

限制必须为一个不小于指定值的数字

@Digits(integer,fraction)

限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction

@Future

限制必须是一个将来的日期

@Max(value)

限制必须为一个不大于指定值的数字

@Min(value)

限制必须为一个不小于指定值的数字

@Past

限制必须是一个过去的日期

@Pattern(value)

限制必须符合指定的正则表达式

@Size(max,min)

限制字符长度必须在min到max之间

@Past

验证注解的元素值(日期类型)比当前时间早

@NotEmpty

验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)

@NotBlank

验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,

@Email

验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

IV 使用注解注入

@Repository(“名称”):dao层(实现dao访问),用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件. @Service(“名称”):service层,用于标注服务层,主要用来进行业务的逻辑处理 @Controller(“名称”):web层,用于标注控制层,相当于struts中的action层

@component:作用就是实现bean的注入,泛指各种组件。当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

@Qualifier(“名称”):指定自动注入的id名称

4.1 @Autowired:自动根据类型注入

使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:@Autowired默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。 ​​@Autowired​​是用在JavaBean中的注解,通过byType形式,用来给指定的字段或方法注入所需的外部资源,能减少或者消除属性或构造器参数的设置。

例子:将自定义的ObjectMapper通过注解@Autowired引入并使用

import org.springframework.beans.factory.annotation.Autowired;

@RestController
@RequestMapping("/test")
public class StudentController {
@Autowired
private ObjectMapper mapper;

@GetMapping("/pojo2string")
public String test() throws JsonProcessingException {
Student stu = new Student();
stu.setId("1");
stu.setName("Nicholas");
stu.setAge(18);
stu.setGender("male");
stu.setBirthday(new Date());
String str = mapper.writeValueAsString(stu);
return str;
}

}

4.2 配置绑定

​@ConfigurationProperties​​注解用于自动配置绑定,可以将application.properties配置中的值注入到bean对象上。


该注解使用必须将对象注入到IOC容器中才有配置绑定的功能。


  1. 先在application.properties中配置所需的参数
  2. 编写配置类,并使用​​@ConfigurationProperties​​在类上配置和方法上配置。
@ConfigurationProperties(prefix = "wechat")
public class xxxxconfig {

}

标注在方法上

@Configuration
public class xxxConfig {

@Bean("xxxxBlue")
@ConfigurationProperties(prefix = "color")
public xxxxBlue deepSkyBlue(){
return new xxxxBlue();
}
}