当前位置: 首页 > news >正文

05.注解的原理

1.注解的本质是创建特殊接口,注解通过 @interface 关键字定义,还得搭配「两个」元注解(用于指定规则)。

@Retention(RetentionPolicy.xxx)
@Target(ElementType.xxx)
public @interface Mycomponent { // 注解的“属性”不是方法,向接口中加入方法即可实现String value() default "默认描述"; // 使用时需要传入值(需默认值)
}

2.注解就是你贴在类、方法、属性上的便利贴,只写信息、不执行逻辑,本身啥也干不了,注解怎么生效?

  • ① 用 @interface 定义"便利贴规则"
  • ② 能贴在哪里(比如只能贴在方法上)
  • ③ 贴了能留多久(比如运行时还能看见)
  • ④ 便利贴上写啥信息(注解属性)

3.贴了标签,还需要有对应处理所有贴了标签的方法或类或属性的处理器。
例如 Spring 启动时会通过 AnnotationConfigApplicationContext 扫描指定包,自动加载内置注解处理器(ConfigurationClassPostProcessor 负责解析 @component、@configuration 注解,将所有贴有这些标签的类装变为 BeanDefinition(未实例化)),Spring 扫描器(如 ClassPathBeanDefinitionScanner)会:

  • ① 遍历指定包路径下的所有 .class 字节码文件(不加载类到 JVM,仅读取字节码)
  • ② 过滤掉非候选类(如接口、抽象类、匿名类 或被 @Conditional 排除的类),解析字节码,判断是否有 @Component,扫描器通过 ASM 框架读取类字节码中的注解元数据。不反射创建类实例,直接解析字节码的 “运行时常量池”,检测类的注解列表是否存在 @Component 或其他派生注解(@Service,……),若存在,则将该类注册为 Spring 容器的 BeanDefinition,后续统一初始化。
  • ③ 找 @Component 时,仅读取字节码文件内容,不会执行类的加载,核心原因是用了 ASM 框架,它直接操作 .class 文件的字节流,解析其中的注解元数据。只有当 Spring 确认该类是候选 Bean 时(有 @Component 且符合条件),(全扫描后)后续才会创建 Bean 对象(即BeanDefinition),才加载到 JVM。即 Spring 扫描器遍历完「指定包路径下所有层级的 .class 字节码文件」之后,才会完成最终的 BeanDefinition 收集和生成。

4.当进行属性注入时(即解析@Autowired),会调用Autowired处理器。
处理器中遍历 Bean 的所有字段(A进入属性注入时,A@raw处于二级缓存或者三级缓存)

Field[] fields = bean.getClass().getDeclaredFields()
for (Field field : fields) {if (field.isAnnotationPresent(Autowired.class)) {field.setAccessible(true)Object depency = context.getBean(field.getType())field.set(bean, depency)}
}

在postProcessProperties方法内会通过反射条件判断是否有目标注解(比如@Autowired),
有则执行注入逻辑,无则直接返回。注解必须满足@Retention(Retention.RUNTIME)。
@Autowired默认是该配置,否则编译后注解信息会被丢弃,反射无法读取。

5.注解元数据存储原理,当给字段加@Autowired时

    1. @Autowired本身带@Retention(Retention.RUNTIME),告诉编译器 “保留注解到运行时”
    1. 编译.java文件为.class文件时,编译器会把@Autowired的信息(目标注解类、属性值等)写入.class文件的运行时常量池→元数据区(专门存类的额外信息,如注解、泛型)。
    1. 最终.class文件里会保留 “该字段被标注了@Autowired” 的记录,不会被丢弃。

6.JVM 加载 Class 并保留元数据:

    1. Spring 启动时,JVM 加载业务类(如UserService.class),会把.class文件中的元数据(包括注解信息)加载到内存中,存入Class对象中。
    1. 此时UserService.class对象里,不仅包含类结构(字段、方法),还包含字段上的注解元数据(比如userDao字段关联了@Autowired)。
http://www.jsqmd.com/news/58194/

相关文章:

  • 2025最新暖通设备厂家推荐——山东盛海空调,聚焦绿色供暖,工业/商用/大棚/养殖,电锅炉/ 热泵 /空气源热泵 /水源热泵 /污水源热泵/ 水地源热泵 /养殖热泵 /中央空调一站式解决方案
  • 在uboot中修改tja 1103以太网phy from slave to master
  • 【寻宝大冒险】暴力小模拟/对于稀疏大矩阵的储存以及set的妙用/逆向矩阵
  • 权威推荐,甄选高适配服务商护航企业高效沟通
  • 2025年十大旅游景区策划公司推荐,专业景区节庆与全案策划企
  • 2025最新工业/商用/养殖/大棚中央空调企业实力榜发布!五大品牌技术与服务深度解析,引领行业发展新方向
  • WPS批量转换doc到docx
  • 2025年火花机源头厂家推荐:群基精密全品类定制 全国直供,品质保障!
  • 2025最新养殖热泵品牌推荐!畜牧养殖恒温设备权威榜单发布,技术创新引领行业升级
  • 2025年权威发布:泳池除湿机优质厂家排名榜单,头部泳池除湿机选哪家深度剖析助力明智之选
  • day06 滑块进度条
  • 2025最新养殖热泵品牌推荐!国内优质畜牧温控设备权威榜单发布,技术创新与节能实力双优助力规模化养殖
  • 2025 年 12 月智能升降系统厂家权威推荐榜:橱柜拉篮、化妆台、卫浴挂衣杆与嵌入式拉手创新解决方案深度解析
  • 2025年中走丝线切割源头厂家推荐:群基精密全品类定制 全国直供,品质保障!
  • 2025年防伪溯源源头厂家推荐:金天速科技全链路服务 全球市场覆盖,技术领先!
  • VSCode编程插件Cline教程(超详细):安装、配置、使用教程、常见使用示例
  • 2025最新水源热泵/水地源热泵品牌推荐!空调设备行业权威榜单发布,资质技术双优助力清洁供暖/制冷系统升级暖通公司/热泵服务提供商推荐
  • 2025年超融合厂商大PK:实力对比全解析
  • 二硫化硒去屑洗发水实测推荐:深层净屑止痒,头屑人群高效护理方案
  • 2025最新污水源热泵优质服务商推荐!绿色能源解决方案权威榜单发布,技术实力引领行业发展污水源热泵公司/绿色能源技术服务商推荐
  • [Paper Reading] Tiger: Recommender Systems with Generative Retrieval
  • 2025最新水源热泵品牌推荐!高效节能水地源热泵设备权威榜单发布,技术领先企业助力绿色建筑发展水源热泵公司 / 地源热泵设备服务商推荐
  • 2025年12月西南水玻璃厂家综合对比与推荐排行分析
  • 2025最新空气源热泵品牌推荐!空气源热泵系统解决方案行业权威榜单发布,资质技术双优助力高效节能养殖/商用/家用供暖制冷
  • 2025年12月成都搬家公司推荐排行榜:五家优质服务商详细对比与选择指南
  • 2025年12月西南水玻璃厂家推荐排行榜单:五家企业综合对比分析
  • 2025年12月成都搬家公司排行榜推荐:五家服务商客观对比与实用选择指南
  • 2025年12月西南水玻璃厂家推荐排行榜:基于区域供应能力与产品适用性的客观评测
  • 2025年12月花灯厂家推荐排行榜:五家优质企业深度对比与选购指南
  • 2025年12月花灯厂家推荐排行榜单对比评测与选购指南