自定义注解了解一下

简介: 自定义注解了解一下

一 故事背景

乐乐最近的学习中发现别人有自己定义注解,乐乐觉得很炫,注解这东西属于一种切面,自己去实现一定是很酷的一件事,于是乐乐也自己动手写了一个邮件检验的自定义注解

二 实践

  1. 先写个邮件校验注解

     @Target(ElementType.FIELD)
     @Retention(RetentionPolicy.RUNTIME)
     public @interface EmailValidate {
         String message();
     }
    
    

  1. 写一个注解管理器

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

    }

  2. 将注解放在要校验的属性上

    /**

    • 收件人

    */
    @EmailValidate(message = "收件人邮箱格式有误")
    private String recipients;
    /**

    • 抄送人

    */
    @EmailValidate(message = "抄送人邮箱格式有误")
    public String ccEmail;

  3. 在需要调用的地方调用

    String validator = EmailValidateHandle.validator(object);

5.自定义注解完成!

相关文章
|
存储 缓存 算法
[译] OpenSSL 3.0.0 设计
本文翻译 OpenSSL 官网文档:https://www.openssl.org/docs/OpenSSL300Design.htmlTongsuo-8.4.0 是基于 OpenSSL-3.0.3 开发,所以本文对 Tongsuo 开发者同样适用,内容丰富,值得一读!介绍本文概述了 OpenSSL 3.0 的设计,这是在 1.1.1 版本之后的 OpenSSL 的下一个版本。假设读者熟悉名为 &
226 0
[译] OpenSSL 3.0.0 设计
|
编解码 计算机视觉 智慧交通
智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamRPN++(2019)
严格的平移不变性只存在于无填充网络中,如AlexNet。以前基于孪生的网络设计为浅层网络,以满足这一限制。然而,如果所使用的网络被ResNet或MobileNet等现代网络所取代,填充将不可避免地使网络变得更深,从而破坏了严格的平移不变性限制,不能保证物体最后的heatmap集中于中心。
296 0
智慧交通day04-特定目标车辆追踪03:siamese在目标跟踪中的应用-SiamRPN++(2019)
|
JSON 前端开发 Go
Go语言json包的使用技巧 |Go主题月
本文整理了一部分我们平时在项目中经常遇到的关于go语言JSON数据与结构体之间相互转换的问题及解决办法。
513 0
|
算法
m通过目标形心提取、颜色模型以及边缘提取实现两个相向移动人员交叉遮挡过程的检测和分割matlab仿真
m通过目标形心提取、颜色模型以及边缘提取实现两个相向移动人员交叉遮挡过程的检测和分割matlab仿真
234 0
|
机器学习/深度学习 安全 算法
面向对象 这一文拿捏了 ⭐ (建议收藏)
面向对象中级部分已整理完成,建议收藏 🔴🟢🟡
225 0
面向对象 这一文拿捏了 ⭐ (建议收藏)
|
3天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。
|
3天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
354 91