注解浅析
注解,和反射一样,是Java中最重要却最容易被人遗忘的知识点。哪怕Spring、SpringMVC、SpringBoot等框架中充满了注解,我们还是选择性地忽视它。很多人不明白它是怎么起作用的,甚至有人把它和注释混淆...工作中也只是机械性地在Controller上加@RequestMapping。是的,我们太习以为常了,以至于觉得它理所应当就是如此。
注解 Annotation
注解
对注解的理解
注解是代码中的特殊标记,这些标记可以在编译、类加载。运行时被读取并执行相对应的处理
开发时用到的注解
- Spring框架里的那一套——@Controller/@Param/@Select
- Lombok的注解——@Data
- Java原生——@Overried
原生Java最重要的一种注解——Annotation(元注解)即注解的注解。
常见的元注解有@Retention和@Target
- @Retention注解可以简单理解成设置注解的生命周期
- @Target表示这个注解可以修饰哪些地方(方法还是成员变量)
@Override 告诉编译器这个方法是覆盖父类的方法。
@WebServlet("/test") 表示某个类是一个 Servlet,Web 容器就会识别这个注解,在运行的时候调用它。
@Controller("/test") 表示某个类是一个控制器,告诉 Spring 框架该类是一个控制器。
注解和注释是完全不同的两个东西,看起来有点类似,其实完全不同,注解会影响程序的运行。
注释是给开发人员看的,不会影响程序的编译和运行。注解并不是给开发人员看的,是用于给程序看的,会影响程序的编译和运行,编译器,Tomcat,框架。
注解的作用范围
自定义开发一个 Web 容器,基本功能是加载 Servlet,需要管理它的生命周期,所以必须先识别程序中的哪些类是 Servlet。
程序启动的时候,扫描所有的类,找出添加了 @WebServlet 注解的类,进行加载。
@WebServlet 是在程序运行的时候起作用的,Java 就把它的作用范围规定为 RUNTIME。
@Override 是给编译器看的,编译器工作的时候识别出包含了 @Override 注解的方法,就去检查它上层父类的相应方法,存在则通过,否则报错。
@Override 是编译时候起作用,Java 就把它的作用范围规定为 SOURCE。
@Target 指定注解针对的地方
ElementType:
ElementType.TYPE 针对类、接口
ElementType.FIELD 针对成员变量
ElementType.METHOD 针对成员方法
ElementType.PARAMETER 针对方法参数
ElementType.CONSTRUCTOR 针对构造器
ElementType.PACKAGE 针对包
ElementType.ANNOTATION_TYPE 针对注解
@Retention 指定注解的保留域
RetentionPolicy:
RetentionPolicy.SOURCE 源代码级别,由编译器处理,处理之后就不再保留
RetentionPolicy.CLASS 注解信息保留到类对应的 class 文件中
RetentionPolicy.RUNTIME 由 JVM 读取,运行时使用
自定义注解
__EOF__

本文链接:https://www.cnblogs.com/LiPengFeiii/p/14879219.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~