您的位置 首页 java

Java常用注解

引言

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

注解的使用场景:

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

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

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

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();
    }
}
  

文章来源:智云一二三科技

文章标题:Java常用注解

文章地址:https://www.zhihuclub.com/181676.shtml

关于作者: 智云科技

热门文章

网站地图