当前位置: 首页 > 科技观察

测试开发必须掌握的重要知识点-Spring核心知识点-Java注解@

时间:2023-03-18 20:34:36 科技观察

引发的对@Autowired注解的思考我们在写Spring应用的时候,会发现成员变量、方法和构造函数都是通过@定义的Autowired标记实现自动装配的工作,在IDE中点击@Autowired查看其源码,会发现@开头的东西多了。这就是我们今天讲解的重点——Java注解!@Target({ElementType.CONSTRUCTOR,ElementType.METHOD,ElementType.PARAMETER,ElementType.FIELD,ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceAutowired{/***声明是否需要带注释的依赖项。*

Defaultsto{@codetrue}.*/booleanrequired()defaulttrue;}Java注解详解Java注解(Annotation),又称Java注解,是JDK5.0引入的注解机制。Annotation是一个辅助类,广泛应用于Junit、Struts、Spring等工具框架中。Java语言中的类、方法、变量、参数、包都是可以注解的。与Javadoc不同,Java注解可以通过反射获取注解内容。当编译器生成类文件时,可以在字节码中嵌入注释。Java虚拟机可以保留注解内容,注解内容可以在运行时获取。当然它也支持自定义Java注解。Java定义了一组内置注解,包括:@Override-检查该方法是否为重写方法。如果发现父类或者引用的接口没有这个方法,就会报编译错误。@Deprecated-将方法标记为已弃用。如果使用这种方式,会报编译警告。@SuppressWarnings-指示编译器忽略注释中声明的警告。作用于其他注解的注解(或元注解)有:@Retention——标识这个注解是如何保存的,是只存在于代码中,还是编译到类文件中,还是可以在运行时通过反射访问。这三个生命周期对应的是:Java源文件(.java文件)--->.class文件--->内存中的字节码。1.RetentionPolicy.SOURCE:注解只保留在源文件中。当Java文件被编译成class文件时,注解被丢弃;2.RetentionPolicy.CLASS:该注解在class文件中保留,但在jvm加载class文件时丢弃。是默认的生命周期;3、RetentionPolicy.RUNTIME:注解不仅保存到class文件中,jvm加载class文件后仍然存在;@Documented——标记这些注解是否包含在用户文档中。@Target-标记此注释针对的是哪个Java成员。@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)-封装@Inherited-标记这个注解继承自哪个注解类(默认注解不继承自任何子类)从Java7开始,增加了3个额外的注解:@SafeVarargs-从Java7开始支持,忽略任何使用参数作为泛型变量的方法或构造函数调用产生的警告。@FunctionalInterface-Java8支持,标识匿名函数或功能接口。@Repeatable-Java8支持,表示一个注解可以在同一条语句上多次使用。自定义注解开发接下来,让我们学习如何开发自定义注解。使用@interface定义一个注解.METHOD)public@interfaceMyTag{Stringname();//在注解中定义变量名}写一个类并应用@MyTagpublicclassTestTag{@MyTag(name="case1")publicvoidlogin(){System.out.println("login");}@MyTag(name="case2")publicvoidinfo(){System.out.println("info");}@MyTag(name="case3")publicvoidlogout(){System.out.println("注销");}}写一个测试类,在TestTag类的登录方法中获取@MyTag中的name值。前面我们谈到了如何定义很多注解以及将它们放在哪里。现在我们可以开始学习如何提取注解属性了。这是使用注解的关键。获取属性的值是使用注解的目的。获取注解属性,需要用到反射技术(后面的文章我会重点讲反射),代码如下:publicstaticvoidmain(String[]args)throwsNoSuchMethodException,SecurityException,ClassNotFoundException{//加载一个类并实例化它。Classtag=Class.forName("com.my.demo.TestTag");//调用登录方法(必须是public类型)Methodm=tag.getMethod("login");//返回MyTag类型的注释MyTagname=米。getAnnotation(MyTag.class);//输出注解的名称System.out.println("valueis:"+name.name());}运行代码,结果如下:valueis:case1嗯,这个是Java注解的基础,应用起来是不是很简单?接下来我会写关于反射技术以及注解和反射技术的结合应用的文章。希望大家继续关注。