引言
Java注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。通俗理解为标签。
注解的使用场景:
- 提供信息给编译器: 编译器可以利用注解来探测错误和警告信息
- 编译阶段时的处理: 软件工具可以用来利用注解信息来生成代码、Html文档或者做其它相应处理。
注解本质上就是一个类,开发中我们可以使用注解取代 xml配置文件。
- 运行时的处理: 某些注解可以在程序运行的时候接受代码的提取
注解与反射:注解通过反射获取。首先可以通过 Class 对象的 isAnnotationPresent()
方法判断它是否应用了某个注解
JAVA反射机制是
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法
;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
I RequestMapping注解
开箱即用,Outofbox,是指在开发过程中,通过在MAVEN项目的pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期。
作用:将请求和处理请求的控制器方法关联起来,建立映射关系。即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上。
- 标识类:设置映射请求的请求路径的初始信息,方法的请求地址是相对类的请求地址而言的。
- 标识方法:设置映射请求的请求路径的具体信息,方法的请求地址是绝对路径。
标识类的代码实例:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
("/test")
public class LoggerTest {
("/test1")
public void test1() {
}
}
1.1 处理多个 URI
@RequestMapping
可以处理多个 URI
到 /,/index,/index.html 的请求都会跳转到index页面
({"/","/index","index.html"} )
public class IndexController {
String indexMultipleMapping() {
return "index";
}
}
1.2 指定请求的method类型
@RequestMapping
指定请求的method类型
value = "/list" , method = RequestMethod.POST)(
public Str post(){
return post;
}
}
1.3 指定params内容
例子:必须包含username 和age两个参数,且age参数不为10 (可以有多个参数)
value = "/list" , method = RequestMethod.POST,params = { "username","age!=10" })(
public JSONObject list( String communityId) {
JSONObject object = new JSONObject();
object.put("communityId",communityId);
return object;
}
1.4 地址是uri变量
@RequestMapping
的地址可以是uri变量,并且通过@PathVariable
注解获取作为方法的参数。也可以是通配符来筛选请求地址。
"selectAllPlusSql/{name}")(
(operationType = "selectAll", operationName = "通过MyBatis查找")
public R selectAllPlusSql( ("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
("/user")
public class UserController {
public User create ( User user,BindingResult bindingResult) {
///.....
if (bindingResult.hasErrors()) {
String error = bindingResult.getFieldError().getDefaultMessage();
return ServiceApiResult.error(error);
}
return user;
}
}
在实体类中添加相关验证信息的注解
public class User {
(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;
("/test")
public class StudentController {
private ObjectMapper mapper;
("/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容器中才有配置绑定的功能。
- 先在application.properties中配置所需的参数
- 编写配置类,并使用
@ConfigurationProperties
在类上配置和方法上配置。
prefix = "wechat")(
public class xxxxconfig {
}
标注在方法上
public class xxxConfig {
("xxxxBlue")
(prefix = "color")
public xxxxBlue deepSkyBlue(){
return new xxxxBlue();
}
}