什么是注解这些东西请看 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()*/
}
分享到:
相关推荐
总结一下,自定义注解和基于注解的bean创建是Spring框架中强大的特性,它允许我们以声明式的方式定义和管理bean。通过创建自定义注解和相应的处理器,我们可以模拟Spring的行为,为应用程序提供高度定制化的bean管理...
例如,我们可以使用`@Before`注解实现一个简单的方法调用前的日志记录: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore...
接下来,我们可以创建一个类并使用自定义注解标记某个字段: ```java public class AnnotationDemo { @MyCustomAnnotation("测试注解") private String testField; } ``` 现在,我们可以使用反射机制来获取这个...
- `@AfterViews`: 标记的方法会在所有`@ViewById`和`@InjectView`注解的视图绑定完成后自动调用,常用于初始化视图的操作。 - `@OnCreateOptionsMenu`: 自动处理菜单项的点击事件。 - `@OptionsMenu`: 用于关联XML...
### Spring Java注解、元注解与自定义注解详解 ...此外,学会如何使用元注解和自定义注解,可以让开发者在项目中更好地组织代码和实现复杂的功能。希望本文能帮助读者更好地理解和运用Spring中的注解技术。
本压缩包中的例子涵盖了注解的基本使用和一些常见的应用场景。 1. **注解定义** 在Java中,注解以`@`符号开头,后面跟着注解的名称。自定义注解可以通过`@interface`关键字来创建,例如: ```java @interface ...
使用注解拼接SQL,可以将复杂的SQL逻辑从业务逻辑中分离出来,使DAO更易于理解和测试。 6. **示例应用**: 假设我们有一个User DAO,我们可以定义一个方法来获取用户信息,使用自定义注解: ```java public ...
可以使用通配符、操作符和命名切点来创建复杂的匹配规则。 ```java @Pointcut("execution(* com.example.service.*.*(..))") public void serviceMethods() { // 空方法体,仅作为切点声明 } ``` 4. **@Component...
Spring注解驱动开发第41讲——Spring IOC容器创建源码解析(一)之BeanFactory的创建以及预准备工作(合起来整个过程)
- 需要创建Component接口和Module类来定义依赖关系,然后在`@Inject`的成员变量上使用`@Inject`注解。 - Dagger会在编译时生成对应的代码,以处理依赖关系和注入控件。 6. **优势与最佳实践** - 控件注入减少了...
Java自定义注解和通过反射获取...总的来说,理解并熟练掌握Java自定义注解和反射的使用,对于提升Java开发者的编程能力和编写高质量代码具有重要意义。通过深入学习和实践,你可以创造出更加优雅和强大的Java应用程序。
7. **组件扫描**:Spring的`@Component`、`@Service`、`@Repository`和`@Controller`等注解用于标记组件类,配合`@ComponentScan`可以自动检测并注册这些类到IoC容器,从而实现bean的自动创建和依赖注入。...
3. **使用`@Configuration`和`@Bean`注解**:在Spring配置类中,使用`@Configuration`注解标记该类为配置类,然后使用`@Bean`注解声明数据源对象。例如: ```java @Configuration public class DataSourceConfig ...
使用注解配置,可以在实体类上使用`@Entity`,在字段上使用`@Id`、`@GeneratedValue`等注解来定义表结构和主键生成策略。在Service或DAO层,使用`@Transactional`注解声明方法需要事务管理。 **4. Struts2 Action的...
Java 自定义注解验证是Java开发中的一个重要特性,它允许开发者创建自己的元数据,以便在编译时或运行时对代码进行验证和处理。自定义注解为代码提供了额外的信息,使得程序更具可读性、可维护性和灵活性。在本案例...
在Java编程语言中,反射和注解是两个非常重要的特性,它们极大地增强了代码的灵活性和元数据的使用。本文将深入探讨这两个概念的原理及应用方法。 反射(Reflection)是Java提供的一种强大的机制,允许程序在运行时...
例如,当我们使用Room库创建数据库模型,可以使用`@Entity`、`@Dao`和`@Database`注解,然后Room注解处理器会自动生成所需的SQL表和数据库访问对象。 要使用自定义注解和注解处理器,我们需要配置构建系统。在`...
- **自定义注解**:开发者可以创建自己的注解类型,通过`@interface`关键字实现。 ### 2. 注解的作用 - **编译器指令**:注解可以指导编译器进行特定的检查,如`@NonNull`检查对象是否为null。 - **运行时处理**:...
- 示例代码:展示了如何使用注解和XML配置创建控制器、处理HTTP请求。 - 测试用例:帮助验证和理解每个示例的功能。 - 配置文件:如`applicationContext.xml`或`servlet-context.xml`,包含了Spring MVC的配置信息。...