广告
返回顶部
首页 > 资讯 > 后端开发 > Python >深入理解注解与自定义注解的一些概念
  • 884
分享到

深入理解注解与自定义注解的一些概念

2024-04-02 19:04:59 884人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

一、注解介绍 注解就是一种标记符号,可以在代码上的关键节点(类、方法、变量、参数、包)打上标记,然后程序在编译时或者运行时就可以检测到这些标记从而执行一些自己需要的功能操作。 自定义

一、注解介绍

注解就是一种标记符号,可以在代码上的关键节点(类、方法、变量、参数、包)打上标记,然后程序在编译时或者运行时就可以检测到这些标记从而执行一些自己需要的功能操作。

自定义注解的步骤可以简化成三步

1、定义注解:用@Interface创建,并加上常用的元注解和自定义注解类型元素

2、实现注解功能:编写注解的功能,一般都是通过aop在程序运行时去捕获这个标记从而实现。(这步很关键,也是实现自定义注解的关键)

3、使用定义注解:将注解修饰/标记到需要的程序代码中。

通过我们最常见的一个注解来解释这些注解概念:@Autowired,看下他的定义


@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATioN_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;
}

 二、元注解

根据Autowired的定义可知道,最基本的三个元注解

@Target、@Retention、@Documented(还有一个是@Inherited也算一个,但是这里Autowired没用上,我也会介绍一下)

其中,@Target和@Retention是我们定义注解主要关注的部分,而@Documented与@Inherited是我们不很关注的元注解,我会简单提一下。

1、@Documented与@Inherited

@Documented注解,是被用来指定自定义注解是否能随着被定义的java文件生成到JavaDoc文档当中。

@Inherited注解,是指定某个自定义注解如果写在了父类的声明部分,那么子类的声明部分也能自动拥有该注解。@Inherited注解只对那些@Target被定义为ElementType.TYPE的自定义注解起作用。

2、@Target

@Target注解是一个指定可以使用的范围(类、方法、变量、参数、包)

比如上面的Autowired可以使用的范围,CONSTRUCTOR、METHOD、PARAMETER、FIELD、ANNOTATION_TYPE对应下面的ElementType这个枚举类,已经有注释说明这里不再解释。


public enum ElementType {
    
    TYPE,
 
    
    FIELD,
 
    
    METHOD,
 
    
    PARAMETER,
 
    
    CONSTRUCTOR,
 
    
    LOCAL_VARIABLE,
 
    
    ANNOTATION_TYPE,
 
    
    PACKAGE
}

3、@RetentionPolicy

@Retention注解是指用来修饰自定义注解的生命周期。
注解的生命周期有三个阶段:1、Java源文件阶段;2、编译到class文件阶段;3、运行期阶段可以通过反射去操作目标注解)。对应下面的RetentionPolicy枚举:


public enum RetentionPolicy {
    
    SOURCE,
 
    
    CLASS,
 
    
    RUNTIME
}

  三、注解类型元素

如Autowired中required就是注解类型元素

在注解中,需要声明一个变量属性,默认是public,而且必须是带()的,如required(),而且一般我们会给他加默认值,default xx,当不加这个参数就会以默认值表示。比如@Autowired,那required就是true,或者你直接使用@Autowired(required = false)。

四、自定义注解

如下,自定义了一个枚举校验的注解,文章最后链接将是走入工作中实际场景而自定义注解。


@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EnumValid {
    
    String name() default "fieldName";
    // 注解类型变量...
}

在DTO类中使用


public class ReqDTO {
    @EnumValid(name = "typeName")
    private String typeName;
}

具体作用文章未实现,放在了下一篇文章。

好了,这篇文章讲到这里,下一篇根据需求场景来给大家介绍如何实现自定义注解满足我们的需求

到此这篇关于深入理解注解与自定义注解的一些概念的文章就介绍到这了,更多相关注解与自定义注解内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 深入理解注解与自定义注解的一些概念

本文链接: https://www.lsjlt.com/news/127774.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作