创造自己需要的注解

注解

注解是形如@Resource,可以加在类、方法、属性、参数等上面,以实现特定功能的一种java组件。

在写java代码的时候,我比较常见到的是Spring注解。比如在类上使用@Component,将这个类注册到Spring,成为Spring的Bean;在属性上使用@Autowired注解,将Bean注入到这个类。而在没有注解之前,Bean的注册和注入是通过配置文件完成的。

自定义注解

除了使用各种框架提供的现成的注解,我们也可以自己定义注解,以实现定制化的需求。以下为自定义注解步骤:

  1. 新建一个注解类,修饰符使用@interface

    package annotation;
    
    public @interface Unit {
    
    }
    
  2. 定义配置参数。与类的属性定义的区别是:注解的配置参数名后面要跟一个()。此外,可以为配置参数设置默认值。

    package annotation;
    
    public @interface Unit {
    
        String value() default "cm";
    
    }
    
  3. 为注解添加@Target注解(可以使用在注解类上的注解,叫做元注解),限制该注解可以作用在类、方法、属性上面,还是都可以。

    package annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Target;
    
    @Target(ElementType.METHOD)
    public @interface Unit {
    
        String value() default "cm";
    
    }
    
  4. 为注解添加@Retention注解,用来定义注解的生命周期。这里我们通常定义为RetentionPolicy.RUNTIME,即该注解在运行期起作用(此外,还有RetentionPolicy.SOURCE,标识该注解在编译期起作用;RetentionPolicy.CLASS,标识该注解在class文件中起作用)

    package annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Unit {
    
        String value() default "cm";
    
    }
    

以上,我们就完成了一个自定义的注解。

使用自定义注解

可以像使用其他注解一样使用自定义注解,示例如下:

package obj.desk;

import annotation.Unit;

/**
 * 升降桌
 */
public class LiftDesk extends Desk {

    /**
     * 升起桌子(通过注解定义参数distance的单位:米)
     */
    @Unit(value = "m")
    public void up(double distance) {

    }

    /**
     * 降下桌子(通过注解定义参数distance的单位,使用默认值:厘米)
     */
    @Unit
    public void down(double distance) {

    }

}

让自定义注解发挥作用

像我们上面定义的注解Unit,用来声明distance的单位。实际上它发挥的作用是储存数据,即属性value的值。而我们可以使用比如反射,拿到这个值,然后使用这个值做一些事。

在实际工作中,我见过在aop中取注解中的属性值,见过在拦截器中取注解的值,然后做一些通用的事,这些场景下,自定义注解就非常有用。

结语

以上,我们就完成了自定义注解从定义、使用到发挥作用的整个过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值