`
JerryWang_SAP
  • 浏览: 1030565 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Java注解@Autowired的工作原理

阅读更多

Suppose I have a bean named HelloWorld which has a member attribute points to another bean User.

 

 

With annotation @Autowired, as long as getBean is called in the runtime, the returned HelloWorld instance will automatically have user attribute injected with User instance.

 

 

How is this behavior implemented by Spring framework? (1) in Spring container implementation’s refresh method, all singleton beans will be initialized by default.

 

 

When the HelloWorld bean is initialized:

 

 

Since it has the following source code:

@Autowired private User user; In the runtime, this annotation is available in metadata via reflection. In metadata structure below, the targetClass points to HelloWorld bean, and injectedElements points to the User class to be injected.

 

 

(2) In doResolveDependency, the definition for User bean is searched based on this.beanDefinitionNames ( list in DefaultListableBeanFactory ):

 

 

Once found, the found result is added to array candidateNames:

 

 

Then the constructor of User bean class is called ( still triggered by getBean call ), the user instance is created by calling constructor:

 

 

The created user instance together with its name “user” is inserted to the map matchingBeans.

 

 

(3) Finally the user reference is set to user attribute of HelloWorld instance via reflection. Here the variable bean in line 569 points to HelloWorld instance, and value points to user instance.

 

 

Once field.set(bean, value) is done, we can observe in debugger that the user attribute in HelloWorld instance is already injected successfully.

 

 

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

0
0
分享到:
评论

相关推荐

    Spring使用@Autowired注解自动装配

    在这个主题中,我们将深入探讨`@Autowired`的工作原理、使用场景以及如何在Spring应用中有效地利用它。 ### 1. 什么是`@Autowired`注解? `@Autowired`是Spring框架的一部分,它用于自动将依赖对象注入到需要它们的...

    Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)

    本篇文章将深入探讨@Autowired的XML版本、Annotation版本以及源码层面的理解,并通过实际例子解析其工作原理。 首先,让我们从XML版本的@Autowired开始。在Spring早期,依赖注入主要通过XML配置文件进行。例如,...

    @Autowired 注解是如何实现的?(csdn)————程序.pdf

    【@Autowired注解详解及其实现原理】 在Spring框架中,`@Autowired`注解是核心的依赖注入(Dependency Injection...理解`@Autowired`的工作原理有助于我们更好地利用Spring框架,同时也能避免可能出现的依赖注入问题。

    学习Spring笔记_Annotation(注解)_Autowired_Qualifier

    在深入研究`@Autowired`和`@Qualifier`的同时,我们还需要关注Spring的源码,理解其内部的工作原理。通过阅读源码,我们可以了解到Spring如何扫描、解析注解,以及如何进行依赖注入的过程。这将有助于我们更深入地...

    HibernateDaoSupport 与@Autowired

    其工作原理是基于类型匹配(默认),如果存在多个候选bean,则可以通过`@Qualifier`进一步指定目标bean。例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository...

    1.@Resource是按名称进行注入的,属于java自带的。@Autowired是按类型进行注入的,属于Spring。.pdf

    Spring框架是Java领域中实现DI的典型代表,提供了多种注解来支持这一机制,其中两个常用的注解是`@Resource`和`@Autowired`。虽然它们都可以用来实现依赖注入,但它们的用法和原理有所不同。 首先,`@Resource`注解...

    Spring @Autowired

    接下来,我们将深入探讨`@Autowired`的工作原理、使用场景以及相关的最佳实践。 ### 1. `@Autowired`的基本用法 `@Autowired`注解可以用于字段、方法和构造函数,表明Spring容器会在运行时自动为这些成员提供合适...

    BeanPostProcessor实现注入的@Autowired注入的对象是增强的代理对象.rar

    首先,让我们了解`@Autowired`注解的工作原理。`@Autowired`是Spring用来自动装配bean的机制,它会根据类型或者属性名自动找到匹配的bean并注入。例如,如果你有一个类的字段上标注了`@Autowired`,Spring会查找相同...

    spring中Autowired和Qulifier注解

    本文将深入探讨这两个注解的工作原理、使用场景以及如何配合使用。 首先,我们来看`@Autowired`注解。`@Autowired`是Spring框架提供的一个自动装配机制,用于自动将Bean实例注入到需要的地方,如字段、方法或构造...

    spring的annotation的autowired

    本篇文章将深入探讨`@Autowired`的使用、原理以及其在实际开发中的应用。 ### 1. `@Autowired` 注解介绍 `@Autowired`是Spring框架提供的一个注解,用于自动将依赖的Bean注入到当前Bean中。它可以根据类型或者通过...

    自动装配 AutoWire

    在本文中,我们将深入探讨Autowired的工作原理、使用方式以及它如何简化Java应用的依赖管理。** ### 1. 自动装配的概念 自动装配是Spring框架提供的一个功能,它能自动查找并注入bean所依赖的其他bean。这种机制...

    Spring 注解 入门

    2. **`@Autowired`的工作原理** 为了使`@Autowired`生效,我们需要在Spring配置文件中声明`AutowiredAnnotationBeanPostProcessor`。这个处理器会在bean初始化时扫描`@Autowired`注解,并根据类型进行自动装配。...

    使用Java自定义注解模拟实现SpringBoot相关注解.zip

    在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被编译器或运行时环境读取。...在学习和理解这些注解的工作原理时,这样的模拟实现是一个很好的实践。

    java注解大全(非常全面)

    Java注解是Java编程语言中的...学习Java注解需要理解其原理,熟悉各个框架的注解规范,并通过实践来加深理解。这份"java注解大全"资料将引导你全面掌握这一强大的工具,无论是在日常开发还是面试准备中,都将大有裨益。

    java注解深入理解

    Java注解是Java编程语言中的一个重要特性,它提供了一种元数据的方式,允许程序员在代码中插入额外的信息,这些信息可以被编译器或者运行时环境用来执行特定的任务。注解在现代Java开发中扮演了不可或缺的角色,尤其...

    java通用注解API

    通过阅读《Java通用注解和API规范.pdf》这份文档,你可以更深入地理解Java注解的原理、使用方法以及最佳实践,从而在实际开发中更好地利用这一强大的工具。这份文档涵盖了从基础概念到高级特性的全面内容,对于Java...

    spring-autowire.zip

    在IDEA 2020中创建Spring项目并引入Spring Web依赖,我们可以创建几个简单的类来演示@Autowired的工作原理。例如,我们有三个类:Person、Cat和Dog。Person类可能需要依赖Cat和Dog,传统的做法是通过setter方法或者...

    对Spring中注解怎么实现的一些基本原理

    在Spring框架中,注解是...然而,理解注解背后的工作原理至关重要,因为这有助于解决潜在问题和优化应用程序。在实际开发中,开发者需要根据项目需求灵活运用注解,并了解其局限性,以达到最佳的代码管理和维护效果。

    spring @Component注解原理解析

    Spring @Component 注解原理解析 Spring 框架中 @Component 注解是用于...本文主要介绍了 Spring @Component 注解的原理解析,并且还介绍了 Spring 框架中的依赖注入和控制反转机制,希望对大家的学习和工作有所帮助。

Global site tag (gtag.js) - Google Analytics