自定义注解判空简单示例

不说废话,上主代码:

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import a.jery.NotNull;

public final class Demo {
    public static void main(String[] args) {
        Person p=new Person();
        p.setPersonName("123");
        CheckRS rs=check(p);
        System.out.println(String.format("flag:%s,msg:%s.", rs.getFlag(),rs.getMsg()));
        p.setPersonName(null);
        rs=check(p);
        System.out.println(String.format("flag:%s,msg:%s.", rs.getFlag(),rs.getMsg()));
        System.exit(0);
    }

    @SuppressWarnings({ "rawtypes"})
    public static CheckRS check(Object param){
        CheckRS rs=new CheckRS();
        Class cls=param.getClass();
        try {
            BeanInfo beanInfo=Introspector.getBeanInfo(cls);
            PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
            for(PropertyDescriptor pd:pds){
                Method readMethod=pd.getReadMethod();
                Method writeMethod=pd.getWriteMethod();
                if(null!=readMethod&&null!=writeMethod){
                    Field field=cls.getDeclaredField(pd.getName());
                    if(null!=field&&null!=field.getAnnotation(NotNull.class)){
                        if(null==readMethod.invoke(param)){
                            rs.setFlag(false);
                            rs.setMsg(field.getAnnotation(NotNull.class).value());
                            break;
                        }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return rs;
    }

}

运行结果:

flag:true,msg:null.
flag:false,msg:姓名不可为空.

自定义注解类:

package a.jery;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({java.lang.annotation.ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface NotNull {
    String value() default "NotNull.value";
}

普通类:

  

import a.jery.NotNull;

public class Person {    

    @NotNull("姓名不可为空")
    private String personName;

    public String getPersonName() {
        return personName;
    }

    public void setPersonName(String personName) {
        this.personName = personName;
    }    

}

至此 演示完毕。

时间: 2024-08-29 22:57:30

自定义注解判空简单示例的相关文章

java 自定义注解,并使用示例

场景: 对需要校验  手机验证码和短信验证码的controller方法添加 自定义的注解 @CheckType 1. 定义注解 1 /** 2 * 需要短信.验证码验证方法上的注解 3 * date: 2018年11月17日 上午10:28:50 <br/> 4 * 5 * @author ytqiao 6 */ 7 /** 8 *Retention注解:定义被它所注解的注解保留多久( 9 * SOURCE :被编译器忽略, 10 * CLASS : 注解将会被保留在Class文件中,但在运行

自定义JS控件-简单示例

1.  业务需求: 制作 一个按钮对象,然后 像 winfrom  那样调用 就可以了: 首先 我们新建一个 MyControls的 JS文件:(插入如下代码) //这里运用的面向对象的思想 ,新建了一个按钮对象 var button = function (ClientId) { this.control = null; //属性: 按钮对象的 自己 this.id = null; //按钮对象的 id this.value = null; //按钮对象显示的值 this.click = nu

spring AOP + 自定义注解实现权限控制小例子

今天看了一下黑马程序员的视频,上面讲到一个使用spring AOP + 自定义注解的方式来实现权限控制的一个小例子,个人觉得还是可以借鉴,整理出来与大家分享. 需求:service层有一些方法,这些方法需要不同的权限才能访问. 实现方案:自定义一个PrivilegeInfo的注解,使用这个注解为service层中的方法进行权限配置,在aop中根据PrivilegeInfo注解的值,判断用户是否拥有访问目标方法的权限,有则访问目标方法,没有则给出提示. 关键技术:自定义注解及注解解析,spring

一小时搞明白自定义注解(Annotation)

原文链接:http://blog.csdn.net/u013045971/article/details/53433874 什么是注解 Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法.Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据. Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的

自定义注解的简单使用

    框架开发时不免会涉及到配置文件,如properties.xml以及txt等格式的文件.这里介绍框架中通过自定义注解的形式简化配置: 根据需求编写自定义注解中的属性(这里以JDBCConfig为例,这是一个注入数据库常用配置的注解类) @Target是java的元注解(即修饰注解的注解),这里的@Target({METHOD,TYPE})指可以修饰方法.描述类.接口(包括注解类型) 或enum声明. @Retention是java中的运行时注解,可以划分为三类   1.RetentionP

Java注解教程:自定义注解示例,利用反射进行解析

Java注解能够提供代码的相关信息,同时对于所注解的代码结构又没有直接影响.在这篇教程中,我们将学习Java注解,如何编写自定义注解,注解的使用,以及如何使用反射解析注解. 注解是Java 1.5引入的,目前已被广泛应用于各种Java框架,如Hibernate,Jersey,Spring.注解相当于是一种嵌入在程序中的元数据,可以使用注解解析工具或编译器对其进行解析,也可以指定注解在编译期或运行期有效. 在注解诞生之前,程序的元数据存在的形式仅限于java注释或javadoc,但注解可以提供更多

SpringBoot入门十八,自定义注解的简单实现

项目基本配置参考文章SpringBoot入门一,使用myEclipse新建一个SpringBoot项目,使用myEclipse新建一个SpringBoot项目即可,此示例springboot升级为2.2.1版本. 1. pom.xml添加aop支持 <!-- 引入aop切面支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-

基于 自定义注解 和 aop 实现使用memcache 对数据库的缓存 示例

好久没更新blog了,在新公司打拼了两个月,每天都从早忙到晚,学到了很多东西,但是没有时间来更新blog了.... 下面开始讲解这次的主题 公司老大让我研究 ocs 就是阿里云的 开放缓存服务 点击打开链接 其实就是一个memcache的服务 memchech 就是用内存来存放 key -value  在一些情况下就不必频繁的访问 数据库了(其实就是个map) 如何在常用的Dao中方便的使用这个map呢,我首先想到了 aop,然后又想到了自定义注解,那么就开始干吧.... aop动态代理要使用的

使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句

这次给大家介绍一下在Java开发过程中 使用自定义注解开发:主要知识点:            1.反射            主要用于提取注解信息            2.自定义异常  主要是为了自己自定义一个异常信息            3.自定义注解  本次重点 学会如何自定义注解以及如何使用反射提取注解信息运用到实际开发下图表示在Java中注解的含义以及注解的分类和如何解析注解 通常我们使用自定义注解一般使用4中元注解即:@Target@Retention@Documented@In