注解目前非常的流行,很多主流框架都支持注解,而且自己编写代码的时候也会尽量的去用注解,一时方便,而是代码更加简洁。
注解的语法比较简单,除了@符号的使用之外,它基本与Java固有语法一致。Java SE5内置了三种标准注解:
@Override,表示当前的方法定义将覆盖超类中的方法。
@Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。
@SuppressWarnings,关闭不当编译器警告信息。
上面这三个注解多少我们都会在写代码的时候遇到。Java还提供了4中注解,专门负责新注解的创建。
@Target |
表示该注解可以用于什么地方,可能的ElementType参数有: CONSTRUCTOR:构造器的声明 FIELD:域声明(包括enum实例) LOCAL_VARIABLE:局部变量声明 METHOD:方法声明 PACKAGE:包声明 PARAMETER:参数声明 TYPE:类、接口(包括注解类型)或enum声明 |
@Retention |
表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括: SOURCE:注解将被编译器丢弃 CLASS:注解在class文件中可用,但会被VM丢弃 RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。 |
@Document |
将注解包含在Javadoc中 |
@Inherited |
允许子类继承父类中的注解 |
定义一个注解的方式:
1 @Target(ElementType.METHOD)
2 @Retention(RetentionPolicy.RUNTIME)
3 public @interface Test {
4
5 }
除了@符号,注解很像是一个接口。定义注解的时候需要用到元注解,上面用到了@Target和@RetentionPolicy,它们的含义在上面的表格中已近给出。
在注解中一般会有一些元素以表示某些值。注解的元素看起来就像接口的方法,唯一的区别在于可以为其制定默认值。没有元素的注解称为标记注解,上面的@Test就是一个标记注解。
注解的可用的类型包括以下几种:所有基本类型、String、Class、enum、Annotation、以上类型的数组形式。元素不能有不确定的值,即要么有默认值,要么在使用注解的时候提供元素的值。而且元素不能使用null作为默认值。注解在只有一个元素且该元素的名称是value的情况下,在使用注解的时候可以省略“value=”,直接写需要的值即可。
下面看一个定义了元素的注解。
1 @Target(ElementType.METHOD)
2 @Retention(RetentionPolicy.RUNTIME)
3 public @interface UseCase {
4 public String id();
5 public String description() default "no description";
6 }
定义了注解,必然要去使用注解。
1 public class PasswordUtils {
2 @UseCase(id = 47, description = "Passwords must contain at least one numeric")
3 public boolean validatePassword(String password) {
4 return (password.matches("\\w*\\d\\w*"));
5 }
6
7 @UseCase(id = 48)
8 public String encryptPassword(String password) {
9 return new StringBuilder(password).reverse().toString();
10 }
11 }
使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器。
从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。
public static void main(String[] args) {
List<Integer> useCases = new ArrayList<Integer>();
Collections.addAll(useCases, 47, 48, 49, 50);
trackUseCases(useCases, PasswordUtils.class);
}
public static void trackUseCases(List<Integer> useCases, Class<?> cl) {
for (Method m : cl.getDeclaredMethods()) {
UseCase uc = m.getAnnotation(UseCase.class);
if (uc != null) {
System.out.println("Found Use Case:" + uc.id() + " "
+ uc.description());
useCases.remove(new Integer(uc.id()));
}
}
for (int i : useCases) {
System.out.println("Warning: Missing use case-" + i);
}
}
Found Use Case:47 Passwords must contain at least one numeric
Found Use Case:48 no description
Warning: Missing use case-49
Warning: Missing use case-50
上面的三段代码结合起来是一个跟踪项目中用例的简单例子。
写到这里博主想到结合枚举、注解、反射、拦截器等内容,是否可以写一套用户权限验证呢?
将用户权限用枚举的方式给出,注解元素表明某个方法必须拥有某些权限才能调用,拦截器拦截请求方法,用户是否有权限对该方法进行调用,根据用户不同的权限进行不同的处理。欢迎讨论!
相关推荐
### 一、Java注解概述 1. **定义**: 注解是一种声明式的编程元素,以`@`符号开头,后面跟着注解的名称。它们可以应用于类、接口、方法、变量等不同级别。 2. **预定义注解**: Java标准库提供了若干预定义注解,如`...
下面是一个简单的Java注解实例: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface TestAno { enum DOMAIN{ AA, BB; public String call(String msg){ return msg +...
总结,这个实例展示了如何在Spring项目中使用Maven进行构建管理,并采用JavaConfig注解配置来替代传统的XML配置,提高了代码的可读性和维护性。通过这种方式,开发者可以更加专注于业务逻辑,而不是繁琐的配置工作。
在本文中,我们将详细介绍 Java 自定义注解的实例详解,包括如何创建自定义注解、如何使用反射来获取注解信息 oraz 如何使用自定义注解来实现特定的功能。 一、Java 注解的基本概念 Java 注解是一种特殊的标记,它...
在Spring MVC框架中,注解的使用极大地简化了配置,提高了开发效率。Spring MVC通过注解可以实现控制器、方法映射、模型数据绑定、视图解析等关键功能。本实例将深入探讨Spring MVC中常见的注解及其应用。 1. `@...
SSH(Struts2 + Spring + Hibernate)是Java Web开发中常用的一种框架组合,它极大地简化了后台服务的构建。在这个“SSH注解小实例...实践过程中,不仅能够学习到SSH的基本用法,还能提升对Java注解的理解和使用能力。
在Java编程语言中,自定义注解是一种强大的工具,它允许开发者创建自己的元数据,以提供额外的信息给编译器、运行时环境或其他工具。在本案例中,我们讨论的主题是如何利用自定义注解实现过滤实例,特别是结合MySQL...
Java注解(Annotation)自JDK 5.0引入以来,已经成为Java语言的重要特性之一,它为代码元数据提供了一种标准化的方式,使得编译器、工具和其他框架能够理解和处理这些元数据。在Java中,注解是一种元数据,可以被...
总的来说,虽然Java中的抽象类不能直接实例化,但我们可以通过继承并实现其抽象方法,或者利用字节码工具和注解处理器在运行时或编译时动态生成新的类来间接达到实例化抽象类的目的。这样的设计允许我们创建更加灵活...
### Java 注解+动态代理实例解析 #### 一、引言 在Java开发中,**动态代理**是一种非常实用的设计模式,它可以帮助我们实现在不修改原有代码的基础上为对象添加额外的功能,比如日志记录、权限校验等。而**注解**则...
在这个例子中,我们通过`isAnnotationPresent`方法检查`Product`类上是否存在`SoldOut`注解,如果存在,则通过`getAnnotation`获取注解实例并读取其属性。 自定义注解还可以与处理器(Annotation Processor)结合,...
在Spring MVC框架中,我们可以利用Java注解来创建和管理定时任务,这为开发者提供了极大的便利。本实例将深入探讨如何使用`ScheduledExecutorService`接口来实现这一功能。`ScheduledExecutorService`是Java并发包`...
注解的语法比较简单,除了@符号的使用之外,它基本与Java固有语法一致。Java SE5内置了三种标准注解: @Override,表示当前的方法定义将覆盖超类中的方法。 @Deprecated,使用了注解为它的元素编译器将...
本篇文章将深入探讨如何使用Java注解的方式实现Excel的导入导出功能。 首先,我们要理解Java注解(Annotation)的作用。注解是Java语言提供的一种元数据,它允许我们在代码中嵌入额外的信息,这些信息可以被编译器...
在Java开发中,后台注解校验是一种常见且强大的功能,它允许开发者通过在模型类的属性上添加特定的注解来定义数据验证规则。这种校验方式不仅可以提高代码的可读性和可维护性,还能在运行时动态检查输入数据的有效性...
在Java开发中,Spring框架是广泛使用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。Spring的注解功能极大地简化了配置,使得开发者可以更专注于业务逻辑。本篇将深入探讨如何自定义注解...
本实例将深入探讨Spring中的注解使用,特别是如何创建一个最简单的Spring注解实例。 首先,我们需要了解Spring的核心组件——Spring容器,也称为ApplicationContext。这个容器负责管理应用程序中的bean,包括它们的...
在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被编译器或运行时环境读取。Spring框架广泛使用了注解来简化配置,例如`@Autowired`、`@Component`、`@Configuration`...
- **运行时注解**:使用`Field.isAnnotationPresent(Class<? extends Annotation> annotationClass)`检查注解是否存在,然后通过`Field.getAnnotation(Class<? extends Annotation> annotationClass)`获取注解实例。...
总的来说,这个Demo实例将涵盖如何在Java项目中利用AOP、IOC和注解来实现灵活、松散耦合的代码结构。通过学习和实践这个Demo,开发者可以更好地理解和掌握Spring框架的核心特性,从而提高开发效率和代码质量。