`
坏我一锅粥
  • 浏览: 61221 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

注解的创建和使用

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


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

============================================================================================

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

2、
package com.gyj.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 创建注解
 * @author GYJ
 * @date 2014-3-23
 */

@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodInfo {
	String author() default "gyj";
	String date(); 
	int revision() default 1;
	String comments();
}


3、
package com.gyj.annotation;

import java.util.ArrayList;
import java.util.List;

public class AnnotationExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
	}
	
	@Override
	@MethodInfo(author = "gyj", comments = "main method", date = "2014", revision = 1)
	public String toString() {
		return "overriden to string method";
	}
	
	@Deprecated
	@MethodInfo(comments = "method1", date = "2019")
	public static void oldMethod() {
		System.out.println("old method don't use it");
	}
	
	@SuppressWarnings({"unchecked", "deprecation"})
	@MethodInfo(author = "gyj", comments = "main genericsTest", date = "2015", revision = 2)
	public static void genericsTest() {
		List l = new ArrayList<>();
		l.add("abc");
		//发出警告
		oldMethod();
	}

}



4、
package com.gyj.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class AnnotationParsing {

	/**
	 * 解析注解
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Method[] method = Class.forName("com.gyj.annotation.AnnotationExample").getMethods();
			for (Method method1 : method) {
				//验证MethodInfo注解是否可以继承
				if (method1.isAnnotationPresent(com.gyj.annotation.MethodInfo.class)) {
					for (Annotation annotation : method1.getAnnotations()) {
						//具体的注解信息和方法
						System.out.println("注解" + annotation + "存在方法" + method1 + "\n");
					}
					//根据注解信息条件性的做出操作
					MethodInfo methodInfo = method1.getAnnotation(MethodInfo.class);
					if (methodInfo.revision() == 1) {
						System.out.println("revision 是 1 的方法是 " + methodInfo);
					}
				}
			}
		} catch (SecurityException | ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//out put===========================
	/*注解@com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014)存在方法public java.lang.String com.gyj.annotation.AnnotationExample.toString()

	revision 是 1 的方法是 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014)
	注解@java.lang.Deprecated()存在方法public static void com.gyj.annotation.AnnotationExample.oldMethod()

	注解@com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019)存在方法public static void com.gyj.annotation.AnnotationExample.oldMethod()

	revision 是 1 的方法是 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019)
	注解@com.gyj.annotation.MethodInfo(author=gyj, revision=2, comments=main genericsTest, date=2015)存在方法public static void com.gyj.annotation.AnnotationExample.genericsTest()*/



}
分享到:
评论

相关推荐

    自定义注解得使用,模拟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