java实现自定义注解并模拟密码验证功能
学习java的时候总是看见这些注解:@Override,@SuppressWarnings(“unused”)等,平时只知道怎么用,但是不知道如何实现的,今天学习了下,将自己的学习结果分享下,以下以一个小的例子来说明下如何定义自己的注解
1.要实现自定义注解需要通过@interface的方式进行定义,定义注解的语法:
public @interface AnnoName{ 修饰符 数据类型 变量名称();}
这里变量名后面必须用();变量的修饰符可以省略,以下是自己定义的一个注解:
[code]/** * @ClassName: Logininfo * @Description:自定义注解Logininfo * @Author: * @Date: 2019/6/3 */ @Documented @Retention(RetentionPolicy.RUNTIME) //定义注解的生效范围 @Target(value= ElementType.METHOD) //表明此注解针对方法有效 public @interface Logininfo { //定义自己的注解名字为:Logininfo String name() default ""; String password() default ""; }
以上自定义的注解还用到了其他三个注解,这里介绍下其作用:
1.@Retention(RetentionPolicy.RUNTIME):
这个注解的作用主要是说明自定义注解的生效范围,它主要有三个值:
(1)SOURCE:此注解的信息只会保存在源文件中,编译时会被编译器丢弃
(2)CLASS:编译器会将注释记录在类文件中,但是不会被加载到JVM,如果一个注解声明时没有指定范围,默认的就是CLASS
(3)RUNTIME:此注解类型的信息会被保存到源文件,类文件中,同时执行的时候也会被加载到JVM中,此注解可以用利用反射读取其内容
2.@Target(value= ElementType.METHOD):
此注解声明自定义的注解使用的范围,使用在类上,方法上还是参数上,这个注解中存在一个ElementType[]类型的变量,可以用于指定自定义注解的使用限制,它主要有以下几个值:
(1)ANNOTATION_TYPE:只能用在注释的声明上;
(2)CONSIRUCTOR:只能用在构造方法的声明上;
(3)FOELD:只能用在字段的声明上,包含枚举变量;
(4)LOCAL_VARIABLE:只能用在局部变量的声明上;
(5)METHOD:只能用在方法的声明上;
(6)PACKAGE:只能用在包的声明上;
(7)PARAMEIER:只能用在参数的声明上;
(8)TYPE:只能用在类、接口、枚举类型上
3.@Documented
它可以将自定义的注解设置为文档说明信息,因此生成javadoc文档的时候会将此注解的信息加入到文档中。
除了以上三个还有一个注解:
4.@Inherited
此注解用于标注一个父类的注解是否可以被子类继承,如果一个注解需要被子类所继承,在声明的时候直接加上@Inherited即可
下面以一个小例子测试下刚才自定义注解@Logininfo的用法:
定义一个CheckLogin类,其中定义一个判断用户名和密码的方法login(),通过自定义的注解设置默认值
[code]/** * @ClassName: CheckLogin * @Description: 自定义注解的运用 * @Author: * @Date: 2019/6/4 */ public class CheckLogin { /* * @Author * @Description 通过方法运用刚才自定义的注解,通过接收参数判断用户输入的用户名和密码和给定 的用户名和密码是否一致 * @Date 2019/6/4 * @Param [name, password] * @return boolean **/ @Logininfo(name="add",password="123") //设置默认的用户名和密码 public boolean login(String name,String password) throws Exception { //获取注解中参数的内容 // 1.获取方法 Method method = CheckLogin.class.getMethod("login", String.class, String.class); // 2.获取方法中的注解对象 Logininfo logininfo = method.getAnnotation(Logininfo.class); // 3.获取注解中的参数值 String uname = logininfo.name(); String upwd = logininfo.password(); // 4.比较二者的值 if(name.equals(uname) && password.equals(upwd)){ //如果二者相等,返回true return true; } // 否则返回false return false; } }
对login()方法进行测试:
[code]/** * @ClassName: LoginMain * @Description:测试自定义注解 * @Author: * @Date: 2019/6/4 */ public class LoginMain { public static void main(String[] args) throws Exception { CheckLogin cl = new CheckLogin(); //控制台输入用户名,密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String uname = sc.next(); System.out.println("请输入密码:"); String upwd = sc.next(); //调用login方法 boolean b = cl.login(uname, upwd); if(b){ System.out.println("密码验证成功!"); }else{ System.out.println("密码验证失败!"); } } }
以下是测试结果:
1.用户名和密码不一致的情况:
[code]请输入用户名: 123 请输入密码: 132 密码验证失败!
2.用户名和密码相同的情况:
[code]请输入用户名: add 请输入密码: 123 密码验证成功!
以上是个人对于自定义注解的学习分享,有问题欢迎大家提出。
- Java自定义注解实现验证实体类属性的合法性
- Java高级应用之反射实现获取,注解(自定义注解)及模拟实现eclipse中Junit插件
- 实现带验证功能的自定义文本框
- WCF实现自定义用户名和密码验证,并以https传输
- springMVC自定义注解实现用户行为验证
- 使用Knockout实现密码强度的验证功能
- 通过邮件找回密码功能的Java实现
- 整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享
- java web中图片验证码功能实现
- JS 自定义对象实现Java中的Map对象功能
- 基于Spring MVC框架JSR-303的自定义注解Validator验证实现
- Java实现发送短信验证验证码功能
- java通过模拟post方式提交表单实现图片上传功能实例
- Android实现获取短信验证码的功能以及自定义GUI短信验证
- Java中实现自定义的注解处理器(Annotation Processor)
- Java web图片验证功能实现二
- 使用profile的PASSWORD_VERIFY_FUNCTION参数实现自定义的密码验证规则
- 利用自定义Java注解实现资源注入
- 试题:用JavaScript实现密码验证功能
- java中自定义锁实现synchronized功能