java基础自定义注解

这篇博客介绍了Java中的自定义注解及其使用,包括元注解@Target和@Retention的解释。示例展示了如何在类和方法上应用自定义注解,并通过反射获取和打印注解信息。此外,还探讨了自定义注解在日志记录中的应用场景,特别是在AOP中的应用。
摘要由CSDN通过智能技术生成

测试类

package com.baizhi;

@Book(value="百科全书类",name="百科全书类",authors ="{zhangsan,lisi}")
public class BaiKe {

    @Book(value="百科全书方法",name="百科全书方法",authors ="{}")
    public String getBaikeBook(){
        System.out.println("百科全书");
        return  "";
    }
}

自定义注解

package com.baizhi;

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



//元注解 @target作用是注解自定义注解的的注解,指定自定义注解标记的范围
/**:
 * type:表示自定义注解可以标记到类和接口上
 * METHOD:表示自定义注解可以标记到方法上
 * FIELD:表示自定义注解可以标记到属性上
 * PARAMETER:表示自定义注解可以标记到参数上
 * 等等
 */

//Retention 注解主要作用是指定自定义注解的生命周
/**:
 * SOURCE:表示自定义注解只存活于源码阶段
 * CLASS:表示自定义注解存活于源码阶段,编译阶段,在运行阶段不存在
 * RUNTIME:表示自定义注解存活于源码阶段,编译阶段,及运行阶段
 */
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Book {
    String value();
    String name();
    String[] authors();
}

 

demo测试

package com.baizhi;

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

public class Mytest {


    public static void main(String[] args) throws NoSuchMethodException {

        Class c = BaiKe.class;
        Method m =  c.getDeclaredMethod("getBaikeBook");
        //判断当前类上是否有@Book注解
       if(c.isAnnotationPresent(Book.class)) {
           //获取到类上的注解对象
           Book book = (Book) c.getDeclaredAnnotation(Book.class);
           //打印出注解对象中的属性值
           System.out.println(book.name());
           System.out.println(Arrays.toString(book.authors()));
       }

        //判断当前类上是否有@Book注解
        if(m.isAnnotationPresent(Book.class)) {
            //获取到类上的注解对象
            Book book = (Book) m.getDeclaredAnnotation(Book.class);
            //打印出注解对象中的属性值
            System.out.println(book.name());
            System.out.println(Arrays.toString(book.authors()));
        }
    }
}

场景:

自定义注解可以用在记录日志的操作中,通过和Aop结合,当切入后可以获取到切入类对象中的所有方法,然后循环遍历所有的方法判断方法中是否中有标注的自定义注解对象,从而记录方法上的日志内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值