Java后端笔记17-注解

本文详细介绍了自定义注解的创建与使用,包括注解的生命周期、应用位置及如何通过反射读取注解信息,展示了注解在Java编程中的灵活性与实用性。

注解

元注解
自定义注解

package com.xiye.annotation;

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

/**
 * Create by xiye on 2019/12/10 15:19
 */
@Retention(RetentionPolicy.RUNTIME)     // RUNTIME:表示运行(JVM)也能保留注解、CLASS:编译后也能保留,但是JVM中就没有保留、SOURCE:只在代码中保留,编译后和JVM都没有保留
@Target({ElementType.METHOD, ElementType.FIELD})             // 元注解,指明使用注解位置,TYPE:类前、FIELD:字段前、METHOD:方法前、CONSTRUCTOR:构造器前
public @interface Book {
    /*
    * 属性的类型只能是八大基本类型
    * 或者String、Class、枚举类型
    * */
    String name();
    double price() default 9.9;
    String[] authors();
}

注解实用类

package com.xiye.bean;

import com.xiye.annotation.Book;

/**
 * Create by xiye on 2019/12/10 15:40
 */
public class BookShelf {
    // 注解中只有单属性时,可以不写属性名
    // 有默认值的属性可以不写,取默认值
    @Book(name = "Java同行记", authors = {"xiye", "hb"})
    public void show() {
        System.out.println("注解对应方法一");
    }
    @Book(name = "Python同行记", authors = {"xiye", "hb"})
    public void show1() {
        System.out.println("注解对应方法二");
    }
    @Book(name = "Hadoop同行记", authors = {"xiye", "hb"})
    public void show2() {
        System.out.println("注解对应方法三");
    }
}
import com.xiye.annotation.Book;

import java.lang.reflect.Method;
import java.util.Arrays;

/**
 * Create by xiye on 2019/12/10 15:54
 */
public class Demo1_注解 {
    /*
    * 元注解:
    *   @Retention(RetentionPolicy.RUNTIME)
    *       定义该注解的生命周期(有效范围)。RUNTIME:表示运行(JVM)也能保留注解、CLASS:编译后也能保留,但是JVM中就没有保留、
    *       SOURCE:只在代码中保留,编译后和JVM都没有保留
    *   @Target({ElementType.METHOD, ElementType.FIELD})
    *       指明在什么位置使用,写默认是任何地方都可以使用:TYPE:类前、FIELD:字段前、METHOD:方法前、CONSTRUCTOR:构造器前
    *       允许多位置使用,使用数组指明使用位置即可
    *
    *
    * */
    public static void main(String[] args) throws Exception {
        Class<?> aClass = Class.forName("com.xiye.bean.BookShelf");

        Method show = aClass.getMethod("show");
        if (show.isAnnotationPresent(Book.class)) {
            Book book = show.getAnnotation(Book.class);
            System.out.println(book.name() + ", " + book.price() + " " + Arrays.toString(book.authors()));
        }

        Object obj = aClass.newInstance();
        Method[] methods = aClass.getMethods();
        for (Method method : methods) {
            if (method.isAnnotationPresent(Book.class)) {
                method.invoke(obj);
            }
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值