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

青岛网站设计如何做企业管理培训课程是不是传销

青岛网站设计如何做,企业管理培训课程是不是传销,深圳做网站公司有哪些,定制程序网站在 Spring 框架中,依赖注入(Dependency Injection,简称 DI)是核心功能之一。通过不同的注解(如 Autowired、Inject、Resource),开发者可以以声明式方式将所需组件引入到业务代码中,解…

在 Spring 框架中,依赖注入(Dependency Injection,简称 DI)是核心功能之一。通过不同的注解(如 @Autowired@Inject@Resource),开发者可以以声明式方式将所需组件引入到业务代码中,解耦模块间的依赖关系。本文将从注解来源、默认注入行为,到底层处理流程以及多候选 Bean 的决策机制,全面剖析 Spring 容器如何解析并注入这些注解。

使用场景

假设我们有一个 Vehicle 接口,以及它的两个实现类 CarBus

public interface Vehicle {}
@Component
public class Car implements Vehicle {}
@Component
public class Bus implements Vehicle {}

另有一个 VehicleService 类,需要注入一个 Vehicle 类型的 Bean。下面展示三种常用的注解方式:

1. @Autowired + @Qualifier

@Component
public class VehicleService {@Autowired@Qualifier("car")  // 指定注入名称为 car 的 Beanprivate Vehicle vehicle;
}

2. @Inject + @Qualifier/@Named

@Component
public class VehicleService {@Inject@Qualifier("car")private Vehicle vehicle;@Inject@Named("bus")  // 等同于 @Qualifierprivate Vehicle anotherVehicle;
}

3. @Resource

@Component
public class VehicleService {@Resource(name = "car")private Vehicle vehicle;
}

尽管三者都能完成注入,但它们在规范归属与底层实现上各有差异。


注解来源与默认行为

  • JSR 250(jakarta.annotation-api

    • 包含:@Resource@PostConstruct@PreDestroy 等。
    • 默认按 名称 注入。
  • JSR 330(jakarta.inject-api

    • 包含:@Inject@Qualifier@Named
    • 默认按 类型 注入,可配合 @Qualifier/@Named 实现名称注入。
  • Spring 自有注解

    • 包含:@Autowired@Qualifier
    • 默认按 类型 注入,可与 @Qualifier 搭配,指定名称。

注入流程一览

Spring 在创建 Bean 时,会依次执行:

  1. 实例化createBeanInstance
  2. 属性填充populateBean
  3. 初始化initializeBean

属性填充阶段会触发所有已注册的 InstantiationAwareBeanPostProcessor,其中:

  • CommonAnnotationBeanPostProcessor 处理 @Resource
  • AutowiredAnnotationBeanPostProcessor 处理 @Autowired@Inject

populateBean(...) 中,Spring 遍历这些后置处理器并调用其 postProcessProperties(...) 方法,为被注解的字段或 setter 提供目标依赖。


后置处理器注册时机

AbstractApplicationContext#refresh() 中,会先执行:

registerBeanPostProcessors(beanFactory)
finishBeanFactoryInitialization(beanFactory)
  • registerBeanPostProcessors 通过 PostProcessorRegistrationDelegate 收集并实例化所有 BeanPostProcessor
  • 这样,处理自动注入的后置处理器就已就绪,后续创建业务 Bean 时可正常进行注入。

深入剖析:@Resource 注入机制

  1. 扫描注解CommonAnnotationBeanPostProcessor 在静态块中加载 @Resource 类型。
  2. 定位字段buildResourceMetadata(Class<?>) 通过反射遍历所有字段,收集带注解的成员。
  3. 执行注入postProcessProperties(...) 调用 InjectionMetadata.inject(...),依次为每个 ResourceElement 设置字段值。
  4. 匹配逻辑
    • 优先按 name 查找 Bean
    • 若未找到且允许回退,则按 type 匹配(走 Spring 的类型解析机制)

深入剖析:@Autowired / @Inject 注入机制

  1. 初始化注解类型AutowiredAnnotationBeanPostProcessor 构造函数中加载 @Autowired@Value@Inject
  2. 定位字段buildAutowiringMetadata(Class<?>) 反射扫描所有字段,收集 AutowiredFieldElement
  3. 执行注入:在 postProcessProperties(...) 中,调用 InjectionMetadata.inject(...),反射赋值。
  4. 优先匹配
    • descriptor.usesStandardBeanLookup(),会先通过名称获取(若存在)
    • 否则再按类型查找(调用 DefaultListableBeanFactory.doResolveDependency

多候选 Bean 的决策策略

当按类型匹配到多个 Bean 时,Spring 会依次考虑:

  1. @Primary 标注的 Bean
  2. 依赖名称 相同的 Bean
  3. @Qualifier/@Named 指定名称一致的 Bean
  4. @Priority(值越小优先级越高)
  5. 自定义注册resolvableDependencies

若都无法唯一识别,则抛出 NoUniqueBeanDefinitionException(或对非必须注入返回空)。


小结

  • 三类注解来源不同,默认注入行为也有细微差异。
  • Spring 通过两大后置处理器对注解进行解析和注入。
  • 注入前后处理器在容器刷新时完成注册,确保业务 Bean 创建时即可使用。
  • 多 Bean 场景下,Spring 提供完善的优先级策略,保证依赖可预测地注入。

文章转载自:

http://Q7ET4naL.sqyjh.cn
http://ax0QxDH3.sqyjh.cn
http://2Q5gXYTt.sqyjh.cn
http://hIOyU4fM.sqyjh.cn
http://hIZEGudB.sqyjh.cn
http://GpytvvV7.sqyjh.cn
http://BH8sJUyw.sqyjh.cn
http://IoTWPkNw.sqyjh.cn
http://bRaynTXw.sqyjh.cn
http://dbDikTrb.sqyjh.cn
http://YwvYmbly.sqyjh.cn
http://Km3mNQ8I.sqyjh.cn
http://TpKnX3EC.sqyjh.cn
http://zRhXhFKI.sqyjh.cn
http://vE40ftRQ.sqyjh.cn
http://DplGHY2N.sqyjh.cn
http://xpQsiFtG.sqyjh.cn
http://Rqj1iUdX.sqyjh.cn
http://WHLUpli8.sqyjh.cn
http://37cY1oHc.sqyjh.cn
http://GsTLAyMq.sqyjh.cn
http://wBk6EvPr.sqyjh.cn
http://Rot13tTE.sqyjh.cn
http://FhEsqPXU.sqyjh.cn
http://XQvi36FD.sqyjh.cn
http://dkqhnf8C.sqyjh.cn
http://L02cRqoJ.sqyjh.cn
http://nPyFuDw2.sqyjh.cn
http://H2GpHfox.sqyjh.cn
http://j6mRMTkH.sqyjh.cn
http://www.dtcms.com/wzjs/762534.html

相关文章:

  • 仿网站百度会怎么做如何进行企业营销型网站建设规划
  • 深圳宝安高端网站建设wordpress zw
  • 什么网站可以做投票设计用哪些网站
  • 网站建设需要找工信部吗包商科技wordpress
  • 深圳好的网站建设公司排名镇海区住房和建设网站
  • 宣城高端网站建设好网站的建设标准
  • 做网站属于什么行业网站建设与维护教学课件
  • 电影网站建设教程下载代做标书网站
  • 兴义网站seo图书网站建设策划书1万字
  • 网站建设35类北京专业设计网站
  • 百度seo网站网页设计图片与文字的研究
  • dw代码做网站常德建设网站
  • asp+access网站开发实例精讲今天的国际新闻最新消息
  • 网站手机验证码如何做上海嘉定网站建设公司
  • 广州 网站开发 公司电话wordpress联系表单的制作
  • 没网站可以做seo吗可以做go分析的网站
  • 深圳网站建设服务电话网站推广指标
  • php网站迁移广西桂林为什么穷
  • 免费建设网站抽取佣金如何做查询网站
  • 燕郊做网站的酒店行业网站建设方案
  • 企业网站建设问题怎么样在网站上做跳转
  • 有框架有模板怎么做网站wordpress 轮播图
  • 制作网站的第一步休闲零食网站建设+中企动力
  • cms做网站可以做些什么网站网站建设公司广告语 宣传语
  • 砀山县住房和城乡建设局网站软文范例200字
  • 互动网站建设什么意思保定网站建设工作
  • 好品质高端网站设计新感觉建站乡村建设相关网站
  • 济南街道办网站建设wordpress 安装 godaddy在哪里 上传的根目录
  • 制作和淘宝商城一样网站临海房产中介网站如何制作
  • 有动效得网站建设公司哪家好