package annotation1;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* 注解
*
* 注解的使用构成: 1,注解的申明 2,在类型(代码)上面打上注解 3,第三方的程序在使用打了注解的类型
*
* 作业:自己设计一套文档标签,如果我在一个类上面加了这些标签,我把这个类作为参数传给一个方法,就能为这个类的注释生成一个API文档文件
*
* @author Administrator
*
*/
public class AnnotationDemo {
/**
* 使用Annotation(使用反射来得到标签实例) <A extends Annotation> A getAnnotation(Class<A>
* annotationClass):得到指定类型的注解实例 Annotation[] getAnnotations():得到该类型上面的所有注释实例
* Annotation[] getDeclaredAnnotations() :返回直接存在于此元素上的所有注释。 boolean
* isAnnotation() : 该类型是否是一个标签类型(Class) boolean isAnnotationPresent(Class<?
* extends Annotation> annotationClass) :判断该类型上面是否有指定的标签类型
*
* @param args
*/
public static void main(String[] args) throws Exception {
Class<User> c = User.class;
// 说明:annotation也是一种类型
// Class a=MyAnn.class;
if (c.isAnnotationPresent(MyAnn.class)) {
System.out.println("hello");
MyAnn ann = c.getAnnotation(MyAnn.class);
System.out.println(ann.name());
System.out.println(Arrays.toString(ann.names()));
System.out.println(ann.resetDay());
OtherAnn other = ann.other();
System.out.println("other " + other.value());
} else {
System.out.println("fck");
}
Method m = c.getDeclaredMethod("getName");
if (m.isAnnotationPresent(MyAnn.class)) {
System.out.println("方法上面有标签");
}
}
/**
* @SuppressWanings:去掉警告,(去掉警告的类型写在后面括号里面) 标签有自己定义的能放置的位置
*/
@SuppressWarnings(value = "deprecation")
public void dateTest() {
Date d = new Date();
System.out.println(d.toLocaleString());
AnnotationDemo dd = new AnnotationDemo();
dd.someThing();
}
/**
* 标签里面可以有值, 1,一个常量值 2,一个数组
*
* @Deprecated:方法过时
*/
@SuppressWarnings({ "rawtypes", "unused" })
@Deprecated
public void someThing() {
List a = new ArrayList();
}
/**
* 注释一个标签。这个标签没有参数值
*
* @Override:代表当前方法是覆盖一个父类的方法
*/
@Override()
public String toString() {
return super.toString();
}
}
package annotation2;
import java.lang.annotation.ElementType;
/**
* 自定义一个注释
* @author Administrator
*
* @Retention:规定定义的这个标签保留到什么时候
* @Target:规定定义的这个标签能加载哪些位置
* ANNOTATION_TYPE:标签上面
* Constructor:构造器上面
* Field:字段
* Local variable:局部变量
* METHOD:方法/方法的返回类型
* PACKAGE:包
* Parmater:方法参数
* TYPE:类/接口/枚举
*/
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnn {
/**
* 在标签里面加参数 类型 属性名称() [default 类型的值]
* 注意:如果在标签里面仅有value这个属性要填,在使用的时候就可以忽略不写
*/
String name() default "itcast";
String[] names() default {};
String value();
WeekDays resetDay();
OtherAnn other();
}
package annotation3;
public @interface OtherAnn {
String value();
}
分享到:
相关推荐
《Java教材中的例程》是一份集合了Java编程语言各个章节典型示例的压缩包,包含从基础到高级的不同主题。这些章节按照学习路径的逻辑顺序进行排列,旨在帮助初学者逐步掌握Java编程的核心概念和技术。以下是每个章节...
学习如何创建和使用自定义注解,以及如何通过反射机制处理注解,可以增强代码的可维护性。 12. **Java集合框架的高级主题**:包括Lambda表达式、Stream API、Optional类等,这些都是Java 8及以后版本引入的新特性,...
除了XML映射文件,Ibatis还支持使用Java注解来定义Mapper接口。这样可以避免XML文件的繁琐,提高代码可读性。 7. **事务管理** Ibatis支持手动和自动两种事务管理方式。在配置文件中可以指定事务管理器类型,如...
《Thinking in Java》是编程领域中极具影响力的著作之一,由Bruce Eckel编写,本书第4版为读者提供了深入理解Java语言的基础知识及高级概念。Bruce Eckel不仅是MindView公司的总裁,还是一位在软件开发领域享有盛誉...
12. **枚举与注解**:Java中的枚举类型和注解的使用场景。 13. **泛型**:泛型的引入,以及泛型类、泛型方法、通配符的应用。 14. **设计模式**:可能会涉及到一些常见的设计模式,如单例、工厂、观察者等。 15. ...
3. **异常处理**:Java中的异常处理机制,如try-catch-finally语句块,以及自定义异常,帮助开发者处理程序运行时可能出现的问题。 4. **数组与集合框架**:数组是存储同类型数据的基本结构,而集合框架如ArrayList...
Hibernate通过XML配置文件或注解将Java对象映射到数据库表,简化了数据库操作。在这个例子中,Hibernate可能被用来处理相册、论坛和用户的数据存储。 **MySQL** 是一个广泛使用的开源关系型数据库管理系统,以其高...
它支持多种编程语言,包括Python、R、Java、Scala、Julia等,但在这个特定的学习笔记中,只保留了Python接口相关的知识。这份笔记可能包含了作者在学习MXNet过程中对核心概念、API的注解以及对不感兴趣或非核心示例...
通过合理配置 MyBatis Generator 和自定义插件,灵活隔离手写代码和自动生成代码。实现了 BaseService 类对 Service 层进行抽象。通过拦截器实现了方法级粒度的鉴权,通过AOP实现了参数校验。 演示: 可自行注册账号...
现在我们将深入探讨Struts2的拦截器机制及其实例应用。 ### 一、Struts2拦截器基础 1. **拦截器的概念**:拦截器是基于Java的动态代理机制实现的,它在Action调用前后进行处理,形成一个拦截链。每个拦截器都可以...
在Word版的教材中,读者可以方便地进行阅读、注解和搜索,提高了学习的效率。 C语言是一种强大的编程语言,它是许多现代编程语言的基础,包括Java、Python和C++等。掌握C语言能帮助我们深入理解计算机底层工作原理...
二、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置相关 8 4.分工合作include:指定多个配置文件 10 5.tomcat认证访问 10 6.初识拦截器 11 7.Action中的method属性 12 8.使用ForwardAction...
2. **资源控制器** - 这些控制器保护了需要授权才能访问的API端点,通常会使用`@PreAuthorize`或`@Secured`注解来指定访问策略。 3. **JWT令牌解析器** - 项目可能会包含一个自定义的JWT解析器,用于验证和提取JWT...