本文目录一览:
java 如何自定义注解
通过java注释和javadoc,但是注解提供的功能要远远超过这些。注解不仅包含了元数据,它还可以作用于程序运行过程中、注解解释器可以通过注解决定程序的执行顺序。例如,在Jersey webservice 我们为方法添加URI字符串的形式的**PATH**注解,那么在程序运行过程中jerser解释程序将决定该方法去调用所给的URI。
springboot 面向切面编程之使用自定义注解
我们知道使用@Pointcut注解定义切点,它的value属性可以是 切点表达式 或者 注解的全限定名 ;若使用注解的方式,直接在目标切入点方法上加上自定义注解即可纳入AOP的管理
在创建自定义注解时有看到三个注解,分别了解它们的作用
我们先来看看这个枚举类java.lang.annotation.ElementType就是定义注解使用的地方。比如 @Target(ElementType.METHOD) 就是只能用在方法上了。不过可以同时指定多个ElementType的属性来达到既可以用在方法上也可以用在类上的目的: @Target({ElementType.TYPE, ElementType.METHOD})
Documented注解表明这个注释是由 javadoc记录的。 如果一个类型声明被注释了文档化,它的注释成为公共API的一部分。
再来看这个枚举类 java.lang.annotation.RetentionPolicy。该类主要功能是定义注解的 生命周期
创建注解类TestAnnotation。里面有一个name参数,默认是no;没错,该注解只能用在方法上,不能用在类、接口;而且是运行时类型的
在目标方法上使用注解
创建切面类
最后重启工程,访问 和
如何实现自定义Java编译时注解功能
自定义注解,可以应用到反射中,比如自己写个小框架。
如实现实体类某些属性不自动赋值,或者验证某个对象属性完整性等
本人自己用过的验证属性值完整性:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreProperty {
}
然后实体类中:
public class TarResearch implements Serializable{
@IgnoreProperty
private static final long serialVersionUID = 1L;
@IgnoreProperty
private Integer researchId;
@IgnoreProperty
private TarUser userId;
private String version;
private String grade;
....
}
然后action类中
// 验证数据完整性
ClassTarResearch userClass = TarResearch .class;
Field[] field = userClass.getDeclaredFields();
for (int i = 0; i field.length; i++) {
if (field[i].getAnnotation(IgnoreProperty.class) != null) {
continue;
}
String fie = field[i].getName().substring(0, 1).toUpperCase()
+ field[i].getName().substring(1);
Method method = userClass.getMethod("get" + fie);
Object obj = method.invoke(u);
if (obj == null) {
sendResponseMsg(response, "数据错误");
return null;
}
}