文章目录

  • 一、@Component作用
  • 二、@Component注解实现的原理

一、@Component作用

@Component是用在类上面的注解,它的功能是用来告诉spring当前类是一个Bean对象,然后让spring对该类进行自动创建并管理。

二、@Component注解实现的原理

@Component注解底层主要依赖于一个叫做includeFilters的对象来实现的。该对象其实是spring扫描器中的一个属性,它规定了哪些对象会被spring容器识别。所以如果一个对象如果不加上@Component注解,但是在扫描注解上加上该类的名称,那么这个类也会呗spring容器识别成一个对象纳入自身的管理范围,注解代码如下:

@ComponentScan(value = "com.muyichen",includeFilters = {@ComponentScanFilter(type = FilterType.ASSIGNABLE_TYPE,classes = ProductService.class)}
)
public class AppConfig {}

如上方的代码,如果在spring容器加载的属性配置类上方,添加上这个注解,那么就可以把没有@Component注解的ProductService.class类加入到spring容器中了。

总结一下:

当spring启动的时候,扫描器会通过ASM将target目录下所有的class文件的元数据读取出来,然后在扫描的过程中会给自身的includeFilters属性添加上一个默认的类,这个类就是@Component注解类。之后的扫描过程就是将对应拥有@Component注解的class文件加载成一个个的Bean对象放入到spring容器中进行管理。

spring源码解析——@Component注解原理相关推荐

  1. Spring源码解析之@Component注解的扫描

    阅读须知 Spring源码版本:4.3.8 文章中使用/* */注释的方法会做深入分析 正文 承接Spring源码解析之context:component-scan标签解析,下面就是扫描的流程: Cl ...

  2. Spring源码深度解析(郝佳)-学习-源码解析-基于注解切面解析(一)

    我们知道,使用面积对象编程(OOP) 有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共的行为时,例如日志,安全检测等,我们只有在每个对象引用公共的行为,这样程序中能产生大量的重复代码,程序就 ...

  3. Spring源码深度解析(郝佳)-学习-源码解析-基于注解注入(二)

    在Spring源码深度解析(郝佳)-学习-源码解析-基于注解bean解析(一)博客中,己经对有注解的类进行了解析,得到了BeanDefinition,但是我们看到属性并没有封装到BeanDefinit ...

  4. Spring源码解析【完整版】--【bilibili地址:https://www.bilibili.com/video/BV1oW41167AV】

    [本文为bilibili视频雷丰阳的Spring源码解析的完整版总结文章,其中文章前面大部分为他人博文的搬运,后面补充了其未总结的部分] 一.Java的注解 1. 注解的概念 注释:用文字描述程序,给 ...

  5. Spring 源码解析 -- SpringWeb过滤器Filter解析

    简介 在上几篇文章中探索了请求处理相关的代码,本篇开始探索请求处理前的一些操作代码,如Filter.本篇探索Filter初始化.请求处理等相关代码. 前言 说先简单的定义相关的测试代码: 启动类: i ...

  6. Spring源码解析 -- SpringWeb请求参数获取解析

    Spring源码解析 – SpringWeb请求参数获取解析 简介 在文章:Spring Web 请求初探中,我们看到最后方法反射调用的相关代码,本篇文章就探索其中的参数是如何从请求中获取的 概览 方 ...

  7. 手撸spring源码分析IOC实现原理

    手撸spring源码分析IOC实现原理 文章出处:https://github.com/fuzhengwei/small-spring 根据小付哥的手撸spring核心源码一步步学习出来的结果收货总结 ...

  8. 人人都能看懂的Spring源码解析,Spring如何解决循环依赖

    人人都能看懂的Spring源码解析,Spring如何解决循环依赖 原理解析 什么是循环依赖 循环依赖会有什么问题? 如何解决循环依赖 问题的根本原因 如何解决 为什么需要三级缓存? Spring的三级 ...

  9. Spring源码解析之-- 事务TransactionInterceptor 分析(开启事务)

    目录 一.介绍 二.TransactionInterceptor 分析 2. 流程 2.1 invoke 2.1.1 TransactionAspectSupport#invokeWithinTran ...

  10. Spring源码解析 - AbstractBeanFactory 实现接口与父类分析

    2019独角兽企业重金招聘Python工程师标准>>> 我们先来看类图吧: 除了BeanFactory这一支的接口,AbstractBeanFactory主要实现了AliasRegi ...

最新文章

  1. python服务器消息分发_Python实现分发数据块到多台服务器上
  2. 获取pheatmap聚类后和标准化后的结果
  3. SAP S/4 HANA中的供应链计划提升
  4. JavaScript创建对象的6种方式
  5. 机器“血液”登上Nature:一条假鱼靠它续航36小时,无需固态电池
  6. iOS 如何让IOS应用从容地崩溃
  7. 我如何调优SQL Server查询
  8. python工作方法_用python开始一天工作
  9. selenium和PhantomJS的使用
  10. C++简单的写文本文件代码
  11. CryptoJS加密使用
  12. 深入理解FIFO(包含有FIFO深度的解释)
  13. 电源保护——TVS管
  14. 计算机网络技能大赛感受,技能大赛心得体会
  15. java isnull方法_isnull函数详解
  16. Spring Data MongoDB简单的增删改查
  17. 用c#二次开发的焊锡检测视觉系统
  18. Mac电脑快速切换输入法!自动切换输入法!
  19. DirectX End-User Runtimes2010 dl
  20. 恒温烙铁使用注意事项

热门文章

  1. 不卡顿成用户购机第一要素,Mate 9深得人心
  2. 自己用C#写的控制三菱FX5U PLC
  3. 安卓手机修改ntp服务器,修改安卓手机ntp服务器地址
  4. JVM优化之压缩普通对象指针(CompressedOops)与压缩类指针(CompressedClassPointers)
  5. 深度思考:到底什么是面向接口编程?
  6. Lodop,前端自定义打印
  7. python pySerial模块介绍
  8. Linux 下Nginx SSL/HTTPS 配置
  9. Delphi货币类型转中文大写金额
  10. 地理中经纬度的英文名称