自定义注解

什么是注解?

        从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。

        其实说白就是代码里的特殊标志,这些标志可以在编译,类加载,运行时被读取,并执行相应的处理,以便于其他工具补充信息或者进行部署。

JDK的元Annotation(元注解)?

        jdk中包含了一些元注解,主要有@Target,@Retention,@Document,@Inherited,@Result用来修饰注解。

@Target

用于指定被修饰的注解能用于修饰哪些程序单元,@Target也包含了一个value值

取值注解使用范围
METHOD可用于方法上
TYPE可用于类或者接口上
ANNOTATION_TYPE可用于注解类型上(被@interface修饰的类型)
CONSTRUCTOR可用于构造方法上
FIELD可用于域上
LOCAL_VARIABLE可用于局部变量上
PACKAGE用于记录java文件的package信息
PARAMETER可用于参数上

@Retention

用于被修饰的注解可以保存多久,这个注解需要使用参数

生命周期类型描述
RetentionPolicy.SOURCE编译时被丢弃,不包含在类文件中
RetentionPolicy.CLASSJVM加载时被丢弃,包含在类文件中,默认值
RetentionPolicy.RUNTIME由JVM 加载,包含在类文件中,在运行时可以被获取到

 

@Document

这个注解用于指定被修饰的注解类将被javadoc工具提取成文档(该注解了解即可)

@Inherited

这个注解指定被他修饰的注解将具有继承性——如果某个类使用了@Xxx,则其子类将自动被@Xxx修饰

SpringBoot启动类上默认用了以上的元注解

 自定义注解?

1、定义一个注解接口,必须需要 @Retention元注解  标明生命周期,否则不会生效

package com.liu.annotation;
//自定义一个注解
//1、包含了public修饰符
//2、包含了@interface关键词
//3、TestAnno  : 为具体的注解名称
//4、注解内容:可以理解为自定义接口

import java.lang.annotation.*;

@Target(value = {ElementType.FIELD,ElementType.TYPE})
@Documented
@Inherited
@Retention(value = RetentionPolicy.RUNTIME)
public @interface CustomAnno {
    String name() default "阿军";
    boolean flag();
}

2、写一个实体类,加上自定义注解

package com.liu.annotation;

@CustomAnno(flag = false,name = "程序员阿军")
public class Emp {

    private String name;
    private boolean flag;

    @Override
    public String toString() {
        return "Emp{" +
                "name='" + name + '\'' +
                ", flag=" + flag +
                '}';
    }
}

 3、获取实体类的注解内容

package com.liu.annotation;

import java.lang.annotation.Annotation;
import java.util.Arrays;

public class TestAnno {
    public static void main(String[] args) {
        //获取Emp类注解信息
        Class<Emp> empClass = Emp.class;
        CustomAnno customAnno = empClass.getAnnotation(CustomAnno.class);
        System.out.println(customAnno.name()+"==="+customAnno.flag());

        //检查Emp对象是否有自定义注解(CustomAnno)
        boolean annotationPresent = empClass.isAnnotationPresent(CustomAnno.class);
        System.out.println(annotationPresent);

        //获取Emp上的所有自定义的注解
        Annotation[] annotations = empClass.getAnnotations();
        System.out.println(Arrays.toString(annotations));

    }
}

4、运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它提供了许多便捷的功能和特性,其中包括自定义注解配置。 在Spring Boot中,我们可以通过自定义注解来实现一些特定的配置。下面是一个简单的示例来介绍如何自定义注解配置: 1. 首先,创建一个自定义注解类,使用`@interface`关键字来定义注解。例如,我们创建一个名为`@CustomAnnotation`的注解: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface CustomAnnotation { String value() default ""; } ``` 2. 在需要使用该注解的类上添加注解。例如,我们创建一个名为`CustomClass`的类,并在类上添加`@CustomAnnotation`注解: ```java @CustomAnnotation("customValue") public class CustomClass { // 类的具体实现 } ``` 3. 在Spring Boot的配置类中,使用`@ComponentScan`注解来扫描带有自定义注解的类,并进行相应的配置。例如: ```java @SpringBootApplication @ComponentScan(basePackages = "com.example") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 4. 在需要使用自定义注解的地方,可以通过反射获取注解的值,并进行相应的处理。例如,在某个Service类中使用自定义注解: ```java @Service public class CustomService { @Autowired private ApplicationContext applicationContext; public void processCustomAnnotation() { Map<String, Object> customBeans = applicationContext.getBeansWithAnnotation(CustomAnnotation.class); for (Object bean : customBeans.values()) { CustomAnnotation customAnnotation = bean.getClass().getAnnotation(CustomAnnotation.class); String value = customAnnotation.value(); // 处理自定义注解的逻辑 } } } ``` 这样,我们就可以通过自定义注解来实现一些特定的配置。在上述示例中,我们通过自定义注解`@CustomAnnotation`来标记需要进行特定处理的类,并在`CustomService`中通过反射获取带有该注解的类,并进行相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值