本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看活动链接
一 故事背景
乐乐最近的学习中发现别人有自己定义注解,乐乐觉得很炫,注解这东西属于一种切面,自己去实现一定是很酷的一件事,于是乐乐也自己动手写了一个邮件检验的自定义注解
二 实践
-
先写个邮件校验注解
@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface EmailValidate { String message(); } 复制代码
-
写一个注解管理器
public class EmailValidateHandle { public static <T> String validator(T t) throws IllegalArgumentException, IllegalAccessException{ StringBuilder errorMessage = new StringBuilder(); Class<? extends Object> cla = t.getClass(); //利用反射获取类的所有字段包含私有属性 Field[] fields = cla.getDeclaredFields(); for(Field f:fields){ //判断字段是否有定义NotNull注解 EmailValidate emailValidateAnnotation = f.getAnnotation(EmailValidate.class); if(null != emailValidateAnnotation){ //设置些属性是可以访问的 f.setAccessible(true); //得到此属性的值 Object val = f.get(t); boolean flag = checkEmail(val); if(!flag){ //获取注解上的异常信息 errorMessage.append(emailValidateAnnotation.message()).append(","); } } } return errorMessage.toString(); } } 复制代码
-
将注解放在要校验的属性上
/** * 收件人 */ @EmailValidate(message = "收件人邮箱格式有误") private String recipients; /** * 抄送人 */ @EmailValidate(message = "抄送人邮箱格式有误") public String ccEmail; 复制代码
-
在需要调用的地方调用
String validator = EmailValidateHandle.validator(object); 复制代码
5.自定义注解完成!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END