Java元注解,简单案例

    • 【注解】

程序中有 注释 和注解

* 注释:给开发人员.

* 注解:给计算机看的.

    注解使用:学习框架支持注解开发.

    • 【JDK提供的注解】

@Override :描述方法的重写.

@SuppressWarnings :压制警告.

@Deprecated :标记过时.

    • 自定义注解:

定义一个类:class

定义一个借口:interface

定义一个枚举:enum

定义一个注解:@interface

   用法:

 

@interface MyAnno1{

}

带有属性的注解:
@interface MyAnno2{
    int a() default 1;
    String b();
    // 注解属性的类型:基本数据类型,字符串类型String,Class,注解类型,枚举类型,以及以上类型的一维数组.
    // Date d();
    Class clazz();
    MyAnno3 m3(); // 注解
    Color c(); // 枚举
    String[] arrs();

}

@MyAnno4("aaa") // 如果属性名称为value 那么使用的时候 value可以省略(只出现这一个value的属性情况下).
public class AnnotationDemo3 {

}

@interface MyAnno4{
    String value();
    int a() default 1;
}

 

【自定义注解案例】

  注解类

 1 package com.xujingyang.annotation;
 2
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7
 8 //保留到运行时
 9 @Retention(RetentionPolicy.RUNTIME)
10 //只能作用在方法上
11 @Target(ElementType.METHOD)
12 public @interface MyTest {
13
14 }

测试注解类

 1 package com.xujingyang.annotation;
 2
 3 public class Test {
 4     @MyTest
 5     public void f1(){
 6         System.out.println("f1方法执行了~~~~");
 7     }
 8
 9     public void f2(){
10         System.out.println("f2方法执行了~~~~");
11     }
12
13     @MyTest
14     public void f3(){
15         System.out.println("f3方法执行了~~~~");
16     }
17 }

主测试类

 1 package com.xujingyang.annotation;
 2
 3 import java.lang.reflect.Method;
 4
 5 public class Main {
 6     public static void main(String[] args) throws Exception{
 7         Class clazz=Test.class;
 8
 9         Method[] methods = clazz.getMethods();
10         for (Method method : methods) {
11 //            method.invoke(clazz.newInstance());
12 //            System.out.println(method.getName());
13             boolean b = method.isAnnotationPresent(MyTest.class);//判断是否有添加此注解
14             if(b){
15                 method.invoke(clazz.newInstance());
16             }
17         }
18     }
19 }

打印结果

案例二,使用注解方式加载获取JDBC连接的参数

  注解类

 1 package com.xujingyang.jdbc;
 2
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 //保留到运行时
 8 @Retention(RetentionPolicy.RUNTIME)
 9 //只能在方法上添加此注解
10 @Target(ElementType.METHOD)
11 public @interface JDBCInfo {
12     //定义加载数据库的几种属性,可以用default关键字赋默认值
13     String DriverClass() default "com.mysql.jdbc.Driver";
14     String Url();
15     String User() default "root";
16     String Pwd() default "root";
17 }

测试类

 1 package com.xujingyang.jdbc;
 2
 3 import java.lang.reflect.Method;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6
 7 public class Conn {
 8     public static void main(String[] args) throws Exception {
 9         System.out.println(getConnection());//打印连接地址,说明成功
10     }
11
12     @JDBCInfo(Url="jdbc:mysql://localhost:3306/day16")
13     public static Connection getConnection() throws Exception{
14         //加载类的字节码对象
15         Class<Conn> clazz=Conn.class;
16
17         //获取此方法
18         Method method = clazz.getMethod("getConnection");
19
20         //获取注解对象
21         JDBCInfo info = method.getAnnotation(JDBCInfo.class);
22
23         //获取各个已赋值的属性
24         String driverClass = info.DriverClass();
25         String url = info.Url();
26         String user = info.User();
27         String pwd = info.Pwd();
28
29         //注册驱动
30         Class.forName(driverClass);
31
32         //获得连接
33         return DriverManager.getConnection(url, user, pwd);
34     }
35 }

打印结果

注解的简单用法就记这么多了,更深入的研究待以后来搞

时间: 2024-10-04 01:40:39

Java元注解,简单案例的相关文章

java 元注解

java元注解的作用是注解其他注解,java5.0定义了四个标准的元注解:@Target.@Retention.@Inherit.@Documented. 1)@Target:用于描述注解可以修饰的类型.其可选值为:(ElementType.TYPE) ANNOTATION_TYPE(注解类型声明) PACKAGE(包) TYPE(类.接口.枚举) METHOD(方法声明) FIELD(成员变量) LOCAL_VARIABLE(本地变量) CONSTRUCTOR(构造方法) 其代码如下: @Do

Java元注解

元注解的作用是负责注解其他注解.Java定义了4中标准的元注解类型,他们被用来提供对其他注解的说明. @target @Retention @Documented @Inherited 这些类型可以和他们所支持的类在Java.lang.annotation包中找到 每个元注解的作用: @target 修饰了annotation所修饰的对象范围,annotation可被用于package,type(类,接口,枚举,annotation),和类型成员(方法,构造方法,成员变量,枚举值).方法参数和本

Spring注解与Java元注解小结

注解 Annotation 基于注解的开发,使得代码简洁,可读性高,简化的配置的同时也提高了开发的效率,尤其是SpringBoot的兴起,随着起步依赖和自动配置的完善,更是将基于注解的开发推到了新的高度. 元注解 meta-annotation Java 5 定义了四个标准的元注解类型,用以提供对其它注解的功能说明. 位于java.lang.annotation包下,分别为: 1. @Target 2. @Retention 3. @Documented 4. @Inherited 以@Prof

java元注解详解

java中元注解有四个: @Retention @Target @Document @Inherited:  @Retention:注解的保留位置 @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含 @Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得, @Retention(RetentionPolicy.RUNTIME

java 导出excel(简单案例)

public class Student { private int id; private String name; private int age; private Date birth; public Student() { } public Student(int id, String name, int age, Date birth) { this.id = id; this.name = name; this.age = age; this.birth = birth; } ...

java元注解 @Target注解用法

@Target: @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages.types(类.接口.枚举.Annotation类型).类型成员(方法.构造方法.成员变量.枚举值).方法参数和本地变量(如循环变量.catch参数).在Annotation类型的声明中使用了target可更加明晰其修饰的目标. 作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方) 取值(ElementType)有 public enum ElementType

java元注解 @Retention注解使用

@Retention定义了该Annotation被保留的时间长短: 1.某些Annotation仅出现在源代码中,而被编译器丢弃: 2.另一些却被编译在class文件中,注解保留在class文件中,在加载到JVM虚拟机时丢弃,这是默认行为,所以没有用Retention注解的注解,都会采用这种策略 3.而另一些在class被装载时将被读取,注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解 作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围

Java输入输出流简单案例

package com.jckb; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import jav

java元注解 @Documented注解使用

@Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员. 源码 使用方法 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Column {