java注解的基础应用
注解
学过框架的大家都知道著名的Spring有很多经典的注解,比如层级注解:@Service、@Reponsitory、@Controller,以及Spring提供的IOC控制反转自动注入的注解:@Been、@Autowired 和Aop的注解:@Aspect、@Before、@After等等。注解的种类丰富多样,应用也极其方便,那么怎么做出属于自己的注解呢?
注解的生成
举例创建一个TypeAnnotation注解
@Target(ElementType.TYPE)
@Documented//说明该注解被包含在javadoc中
@Retention(RetentionPolicy.RUNTIME) // 保留时间,一般注解就是为了框架开发时代替配置文件使用,JVM运行时用反射取参数处理,所以一般都为RUNTIME类型
public @interface TypeAnnotation {
}
这里需要说明的是@Target注解,这是所创建的TypeAnnotation注解可以用在什么上面,大致提供了这几个可选项:
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
如果设置完成后,就可以创建一个为此类增加功能的类了,可以用反射实现。
实际举例说明
- 创建FieldAnnotation注解,并声明此注解可以应用在字段、枚举、常量上,并提供jdbcType属性默认值是空。
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldAnnotation {
public String jdbcType ()default "";
}
- 在Testgeneric 类上使用,并对jdbcType 赋值
public class Testgeneric {
@FieldAnnotation(jdbcType = "你好!!!如果喜欢的话请帮忙点个赞吧")
public int id;
}
- 创建解析此注解的类TestgetZhujie,并通过query方法【反射】获取到使用类的对象来获取上面的注解内容
public class TestgetZhujie {
public static void main(String[] args) {
Testgeneric a=new Testgeneric(); //使用类
a.setId(666);
query(a);
}
private static void query(Object f) {
//1.获取到class
Class c = f.getClass();
Field[] fArray = c.getDeclaredFields();
for (Field field : fArray) {
//4.处理每个字段对应的sql
//4.1.拿到的字段名上是否含有此注解
boolean fExists = field.isAnnotationPresent(FieldAnnotation.class);
if (!fExists) {
continue;
}
FieldAnnotation column = field.getAnnotation(FieldAnnotation.class);
String columnName = column.jdbcType();
System.out.println("注解参数:"+columnName);
//4.2.当然也可以拿它的值
try {
System.out.println(field.getName()+"值为:"+field.get(f));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
- 运行结果:


本文详细介绍如何在Java中创建并应用自定义注解,包括注解的生成、使用及通过反射获取注解内容的过程。从注解元注解的使用,到实际案例的解析,帮助读者理解注解在框架开发中的作用。

被折叠的 条评论
为什么被折叠?



