首页 > 编程语言 >java web开发(注解)

java web开发(注解)

时间:2022-11-23 15:04:54浏览次数:40  
标签:web java String min max Range 注解 check


        注解也是蛮有意思的。个人来看,它更多是一种偷懒的处理方法。一种常见的场景是这样的,如果我们希望对某一种类型的数据来做判断,那么就是在每个函数开始的位置添加各种各样的判断语句。如果数据比较少的话,尚可接受;但是数据一多,整个代码就显得非常臃肿。

        下面,我们就通过一个简单的例子,看看注解如何使用,

1、定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface Range{
int min() default 0;
int max() default 255;
}

        注解的定义比较简单,只要看看@interface这个关键字在哪,@interface后面那个变量就是注解名。在它的上方有两个元注解,一个是@Retention,一个是@Target。Retention告诉编译器,这个Range是在系统运行的时候使用的。而Target告诉编译器,这个注解用于类变量来使用的。在Range注解中,定义了两个变量,一个是min,一个是max。min的默认数值是0,max默认是255。

2、注解使用

class Human{
@Range(min=1, max=20)
public String name;

@Range(max=10)
public String city;
}

        注解的使用非常简单。既然前面谈到Range主要用于类变量,那么直接把Range添加到对应变量的头部就可以了。如果需要修改数值的话,重新设定min和max即可。

3、注解的分析和调用

public static boolean check(Human h){
for (Field field:h.getClass().getFields()){
Range r = field.getAnnotation(Range.class);

if(r != null){
try {
Object o = field.get(h);
if(o instanceof String){
String s = (String) o;
if(s.length() < r.min() || s.length() > r.max()){
return false;
}
}
}catch(IllegalAccessException ill){
return false;
}
}
}

return true;
}

public static void test10(){

Human h = new Human();
h.city = "yancheng";
h.name = "tom";
System.out.println(check(h));
}

        如上面代码所示,有两个函数,一个是test10,一个是check。前者主要是创建一个human对象,赋值之后用check函数来判断city和name本身是否符合要求。

        check函数中,首先还是通过getClass获得Class数据类型,进而通过getFields获取所有的类变量。关键的一步来了,这个时候可以通过getAnnotation获得注解Range。如果Range不为空的话,就可以通过field.get获得数据,将获得的数据与注解中的min、max进行判断,这样注解的功能不久可以实现了。

4、其他

        当然注解的功能不止于此。大家在web开发中经常看到的controller注解也是一种场景。开发的时候灵活运用注解,有的时候确实可以帮助我们节省很多的工作量。代码看上去也清爽一些。

标签:web,java,String,min,max,Range,注解,check
From: https://blog.51cto.com/feixiaoxing/5881295

相关文章

  • java web开发(反射)
        反射是java很重要的一个特点。也是它区别于c、c++、fortan等传统语言的一个重要的语言特征。通过反射可以做很多的事情,比如动态创建类,动态修改变量,动态调用类函......
  • java web开发(IDEA安装 + 第一个java工程)
    发环境是myeclipse。时过境迁,现在大家更多地愿意用IDEA环境来开发。对于新手,尤其是刚入门的同学来说,有一个好的IDE环境还是能够减轻不少负担的。这样,可以让学习的曲线不是......
  • 常用js库和框架(vue&element ui与webpy)
        编写前端代码的同学都知道,目前最火的前端代码是vue&elementui,而后端个人又比较喜欢用webpy,那么这两者是怎么配合的。现在都说要实现前后端分离,两者的json数据......
  • java上位机开发(编译和部署)
        之前开发java程序的时候,一直用的是命令行来完成的。其实大家也可以用eclipse、IDEA这些工具来做。部署也是一样,一方面大家可以用maven这些工具来完成,另外一方面......
  • java和设计模式(行为模式)
        和构建模式、结构模式相比较,行为模式的内容要多一些。在设计模式中,行为模式强调的是类和对象之间的交互关系。它更多强调的是,在特定的行为场景种,使用哪一种设计......
  • Spring Cache + Redis;用Spring Cache的注解自动管理Redis缓存
    https://blog.csdn.net/qq_45839663/article/details/127209491?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHu......
  • java和设计模式(结构模式)
        在设计模式中,有一类设计模式是比较有意思的,但是关注的人不多。这就是结构模式。如果说创建模式的重点是如何创建出实例对象,那么结构模式的特点就是利用类、示例......
  • java和设计模式(创建模式)
        有过软件开发经验的同学都知道,软件开发功能怎么都能完成。但是如果需要在软件上面不断做需求变更和重构,这就变得好复杂了。对于这些变更,如果只是硬编码去解决,那......
  • java上位机开发(定时器使用)
    在实际开发中,我们发现有一些任务需要周期性的完成,比如说数据库的检查、设备的检查、状态的检查、变量的检查等等。这个时候就会使用到定时器。在javaswing中,因为本身已经集......
  • java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoo
    启动连接redis时报错因为spring-boot-starter-data-redis升级后将commons-pool2踢出去了解决方式两个1.导入commons-pool2依赖<dependency><groupId>org.apach......