`

注解的创建和使用

 
阅读更多

什么是注解这些东西请看 think in java 
在这个实例中演示的是注解的创建和利用反射原理去获取代码信息
 

1、解释本实例用到的注解及解释 
2、创建注解 
3、创建使用注解的类 
4、利用反射机制去解析类代码信息
 
============================================================================================

1、注解的方法不能有参数 
   注解的返回类型是 “基本类型” “字符串” “枚举” “Class” “返回类型的数组” 
   注解可以添加元注解: 
   Documented:将此注解包在javadoc中 
   Target:表示该注解用在什么地方,method:声明方法 
   Inherited:表示继承父类中的注解 
   Retention:表示在什么级别保存该注解信息,RetentionPolicy.RUNTIME:运行期 间保留 

2、

Java代码  收藏代码
  1. package com.gyj.annotation;  
  2.   
  3. import java.lang.annotation.Documented;  
  4. import java.lang.annotation.ElementType;  
  5. import java.lang.annotation.Inherited;  
  6. import java.lang.annotation.Retention;  
  7. import java.lang.annotation.RetentionPolicy;  
  8. import java.lang.annotation.Target;  
  9.   
  10. /** 
  11.  * 创建注解 
  12.  * @author GYJ 
  13.  * @date 2014-3-23 
  14.  */  
  15.   
  16. @Documented  
  17. @Target(ElementType.METHOD)  
  18. @Inherited  
  19. @Retention(RetentionPolicy.RUNTIME)  
  20. public @interface MethodInfo {  
  21.     String author() default "gyj";  
  22.     String date();   
  23.     int revision() default 1;  
  24.     String comments();  
  25. }  



3、

Java代码  收藏代码
  1. package com.gyj.annotation;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. public class AnnotationExample {  
  7.   
  8.     /** 
  9.      * @param args 
  10.      */  
  11.     public static void main(String[] args) {  
  12.           
  13.     }  
  14.       
  15.     @Override  
  16.     @MethodInfo(author = "gyj", comments = "main method", date = "2014", revision = 1)  
  17.     public String toString() {  
  18.         return "overriden to string method";  
  19.     }  
  20.       
  21.     @Deprecated  
  22.     @MethodInfo(comments = "method1", date = "2019")  
  23.     public static void oldMethod() {  
  24.         System.out.println("old method don't use it");  
  25.     }  
  26.       
  27.     @SuppressWarnings({"unchecked""deprecation"})  
  28.     @MethodInfo(author = "gyj", comments = "main genericsTest", date = "2015", revision = 2)  
  29.     public static void genericsTest() {  
  30.         List l = new ArrayList<>();  
  31.         l.add("abc");  
  32.         //发出警告  
  33.         oldMethod();  
  34.     }  
  35.   
  36. }  



4、

Java代码  收藏代码
  1. package com.gyj.annotation;  
  2.   
  3. import java.lang.annotation.Annotation;  
  4. import java.lang.reflect.Method;  
  5.   
  6. public class AnnotationParsing {  
  7.   
  8.     /** 
  9.      * 解析注解 
  10.      * @param args 
  11.      */  
  12.     public static void main(String[] args) {  
  13.         try {  
  14.             Method[] method = Class.forName("com.gyj.annotation.AnnotationExample").getMethods();  
  15.             for (Method method1 : method) {  
  16.                 //验证MethodInfo注解是否可以继承  
  17.                 if (method1.isAnnotationPresent(com.gyj.annotation.MethodInfo.class)) {  
  18.                     for (Annotation annotation : method1.getAnnotations()) {  
  19.                         //具体的注解信息和方法  
  20.                         System.out.println("注解" + annotation + "存在方法" + method1 + "\n");  
  21.                     }  
  22.                     //根据注解信息条件性的做出操作  
  23.                     MethodInfo methodInfo = method1.getAnnotation(MethodInfo.class);  
  24.                     if (methodInfo.revision() == 1) {  
  25.                         System.out.println("revision 是 1 的方法是 " + methodInfo);  
  26.                     }  
  27.                 }  
  28.             }  
  29.         } catch (SecurityException | ClassNotFoundException e) {  
  30.             e.printStackTrace();  
  31.         }  
  32.     }  
  33.       
  34.     //out put===========================  
  35.     /*注解@com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014)存在方法public java.lang.String com.gyj.annotation.AnnotationExample.toString() 
  36.  
  37.     revision 是 1 的方法是 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014) 
  38.     注解@java.lang.Deprecated()存在方法public static void com.gyj.annotation.AnnotationExample.oldMethod() 
  39.  
  40.     注解@com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019)存在方法public static void com.gyj.annotation.AnnotationExample.oldMethod() 
  41.  
  42.     revision 是 1 的方法是 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019) 
  43.     注解@com.gyj.annotation.MethodInfo(author=gyj, revision=2, comments=main genericsTest, date=2015)存在方法public static void com.gyj.annotation.AnnotationExample.genericsTest()*/  
  44.   
  45.   
  46.   
  47. }  
分享到:
评论

相关推荐

    自定义注解得使用,模拟spring通过注解方式创建bean实例

    总结一下,自定义注解和基于注解的bean创建是Spring框架中强大的特性,它允许我们以声明式的方式定义和管理bean。通过创建自定义注解和相应的处理器,我们可以模拟Spring的行为,为应用程序提供高度定制化的bean管理...

    SpringBoot AOP各种注解、自定义注解、鉴权使用案例(免费下载)

    例如,我们可以使用`@Before`注解实现一个简单的方法调用前的日志记录: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore...

    Java自定义注解使用反射获取字段注解

    接下来,我们可以创建一个类并使用自定义注解标记某个字段: ```java public class AnnotationDemo { @MyCustomAnnotation("测试注解") private String testField; } ``` 现在,我们可以使用反射机制来获取这个...

    Android annotations 注解 使用

    - `@AfterViews`: 标记的方法会在所有`@ViewById`和`@InjectView`注解的视图绑定完成后自动调用,常用于初始化视图的操作。 - `@OnCreateOptionsMenu`: 自动处理菜单项的点击事件。 - `@OptionsMenu`: 用于关联XML...

    Spring java注解,元注解和自定义注解

    ### Spring Java注解、元注解与自定义注解详解 ...此外,学会如何使用元注解和自定义注解,可以让开发者在项目中更好地组织代码和实现复杂的功能。希望本文能帮助读者更好地理解和运用Spring中的注解技术。

    java关于注解使用的例子

    本压缩包中的例子涵盖了注解的基本使用和一些常见的应用场景。 1. **注解定义** 在Java中,注解以`@`符号开头,后面跟着注解的名称。自定义注解可以通过`@interface`关键字来创建,例如: ```java @interface ...

    Java 使用注解拼接SQL语句

    使用注解拼接SQL,可以将复杂的SQL逻辑从业务逻辑中分离出来,使DAO更易于理解和测试。 6. **示例应用**: 假设我们有一个User DAO,我们可以定义一个方法来获取用户信息,使用自定义注解: ```java public ...

    使用Spring的注解方式实现AOP的细节

    可以使用通配符、操作符和命名切点来创建复杂的匹配规则。 ```java @Pointcut("execution(* com.example.service.*.*(..))") public void serviceMethods() { // 空方法体,仅作为切点声明 } ``` 4. **@Component...

    Spring注解驱动开发第41讲——Spring IOC容器创建源码解析(一)之BeanFactory的创建以及预准备工作(合起

    Spring注解驱动开发第41讲——Spring IOC容器创建源码解析(一)之BeanFactory的创建以及预准备工作(合起来整个过程)

    Android使用注解查找控件

    - 需要创建Component接口和Module类来定义依赖关系,然后在`@Inject`的成员变量上使用`@Inject`注解。 - Dagger会在编译时生成对应的代码,以处理依赖关系和注入控件。 6. **优势与最佳实践** - 控件注入减少了...

    java自定义注解和通过反射获取注解

    Java自定义注解和通过反射获取...总的来说,理解并熟练掌握Java自定义注解和反射的使用,对于提升Java开发者的编程能力和编写高质量代码具有重要意义。通过深入学习和实践,你可以创造出更加优雅和强大的Java应用程序。

    Spring demo 自动检测注解

    7. **组件扫描**:Spring的`@Component`、`@Service`、`@Repository`和`@Controller`等注解用于标记组件类,配合`@ComponentScan`可以自动检测并注册这些类到IoC容器,从而实现bean的自动创建和依赖注入。...

    基于注解和Spring的多数据源配置和使用

    3. **使用`@Configuration`和`@Bean`注解**:在Spring配置类中,使用`@Configuration`注解标记该类为配置类,然后使用`@Bean`注解声明数据源对象。例如: ```java @Configuration public class DataSourceConfig ...

    SSH框架注解方式,struts自身创建Action

    使用注解配置,可以在实体类上使用`@Entity`,在字段上使用`@Id`、`@GeneratedValue`等注解来定义表结构和主键生成策略。在Service或DAO层,使用`@Transactional`注解声明方法需要事务管理。 **4. Struts2 Action的...

    java 自定义注解验证

    Java 自定义注解验证是Java开发中的一个重要特性,它允许开发者创建自己的元数据,以便在编译时或运行时对代码进行验证和处理。自定义注解为代码提供了额外的信息,使得程序更具可读性、可维护性和灵活性。在本案例...

    反射,注解原理和使用的方法

    在Java编程语言中,反射和注解是两个非常重要的特性,它们极大地增强了代码的灵活性和元数据的使用。本文将深入探讨这两个概念的原理及应用方法。 反射(Reflection)是Java提供的一种强大的机制,允许程序在运行时...

    java注解学习与android中使用

    例如,当我们使用Room库创建数据库模型,可以使用`@Entity`、`@Dao`和`@Database`注解,然后Room注解处理器会自动生成所需的SQL表和数据库访问对象。 要使用自定义注解和注解处理器,我们需要配置构建系统。在`...

    注解的使用

    - **自定义注解**:开发者可以创建自己的注解类型,通过`@interface`关键字实现。 ### 2. 注解的作用 - **编译器指令**:注解可以指导编译器进行特定的检查,如`@NonNull`检查对象是否为null。 - **运行时处理**:...

    springMVC注解和非注解demo

    - 示例代码:展示了如何使用注解和XML配置创建控制器、处理HTTP请求。 - 测试用例:帮助验证和理解每个示例的功能。 - 配置文件:如`applicationContext.xml`或`servlet-context.xml`,包含了Spring MVC的配置信息。...

Global site tag (gtag.js) - Google Analytics