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

Spring框架里注解@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.

  1. 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注解和@Resource注解的区别

    在Spring框架中,`@Autowired`和`@Resource`注解是两个常见的依赖注入(DI, Dependency Injection)工具,它们都是用来解决组件之间的耦合问题,使得代码更加灵活和可测试。然而,这两个注解在具体使用时有一些关键性...

    通过@Autowired注解注入bean的顺序,以及@bean注入.rar

    让我们深入探讨这两个注解的工作原理,以及它们在注入bean时的顺序。 `@Autowired`注解由Spring提供,用于自动装配bean的依赖。当我们在字段、构造函数、方法或方法参数上使用`@Autowired`时,Spring会自动查找与所...

    Spring注解@Resource和@Autowired.doc

    Spring 框架中提供了两个重要的注解,分别是@Resource 和@Autowired,它们都是用于 bean 的自动装配的。了解这两个注解的区别和使用场景是非常重要的。 首先,@Autowired 是 Spring 提供的注解,需要导入 org....

    Spring@Autowired注解与自动装配.rar

    在Spring框架中,`@Autowired`注解是一个关键特性,用于实现依赖注入(Dependency Injection,简称DI)。依赖注入是设计模式中的一个重要概念,它有助于降低组件之间的耦合度,提高代码的可测试性和可维护性。`@...

    Spring使用@Autowired注解自动装配

    在Spring框架中,`@Autowired`注解是一个关键特性,用于简化依赖注入的过程。依赖注入是一种设计模式,它允许我们解耦代码,提高模块的可测试性和可维护性。在这个主题中,我们将深入探讨`@Autowired`的工作原理、...

    Spring In Action 使用@Autowired 和@ Resource 自动装配Bean

    在Spring框架中,`@Autowired`和`@Resource`都是用于自动装配Bean的重要注解,它们简化了依赖注入的过程,使得代码更加简洁、易于维护。本文将深入探讨这两个注解的使用、区别以及如何在实际开发中应用它们。 首先...

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

    Spring框架的@Autowired自动装配是其依赖注入(Dependency ...理解@Autowired的工作原理,能帮助我们更好地利用Spring框架构建高效的应用。通过阅读源码,可以更深入地理解Spring的内部机制,从而提升我们的开发技能。

    详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理

    @Autowired 是 Spring 框架提供的依赖注入注解,主要支持在 set 方法、field 和构造函数中完成 bean 注入。其注入方式是通过类型查找 bean,即 byType 的,如果存在多个同一类型的 bean,则使用 @Qualifier 来指定...

    详解Spring注解--@Autowired、@Resource和@Service

    Spring框架中有三个非常重要的注解,即@Autowired、@Resource和@Service。这三个注解都是Spring框架中最常用的注解,它们都是用于解决Spring框架中的依赖注入问题的。 @Autowired @Autowired是Spring框架中最...

    SSH笔记-通过@Autowired配置注入关系

    在Spring框架中,`@Autowired`注解是一个关键特性,用于自动装配Bean的依赖。它极大地简化了传统XML配置中的bean依赖注入过程。本笔记将深入探讨如何在Spring 4中利用`@Autowired`注解配置注入关系,以及它与前一篇...

    Spring框架中 @Autowired 和 @Resource 注解的区别

    在Spring框架中,注解是实现依赖注入的重要方式,其中包括`@Autowired`和`@Resource`两个常用的注解。它们虽然都可以用来注入依赖,但在实际使用中存在一些区别。 首先,`@Autowired`注解是Spring框架特有的,主要...

    12 @Autowired是如何工作的?-Spring注解源码深度揭秘-慕课专栏1

    在Spring框架中,`@Autowired`注解是一个关键的依赖注入(DI)工具,它极大地简化了组件之间的关联。...理解`@Autowired`的内部工作原理有助于我们更好地利用Spring框架,编写更加灵活和解耦的代码。

    学习Spring笔记_Annotation(注解)_Autowired_Qualifier

    `@Autowired`注解是Spring框架提供的一种依赖注入(Dependency Injection,DI)机制,用于自动装配Bean。它可以根据类型或名称来查找并注入所需的依赖。默认情况下,Spring会根据Bean的类型来匹配,如果存在多个相同...

    【Java面试】@Resource 和 @Autowired 的区别.doc

    @Autowired 是 Spring 框架提供的一个注解,默认是根据类型来实现 Bean 的依赖注入。@Autowired 注解里面有一个 required 属性,默认值是 true,表示强制要求 Bean 实例的注入,在应用启动的时候,如果 IOC 容器里面...

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

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

    Spring @Autowired

    在Java的Spring框架中,`@Autowired`是一个关键的依赖注入(Dependency Injection,简称DI)注解,它允许开发者自动装配Bean的依赖,无需手动设置属性或者调用构造函数。这个注解是Spring框架的核心特性之一,极大地...

    Spring使用@Autowired为抽象父类注入依赖代码实例

    Spring框架中,使用@Autowired注解可以将依赖项注入到Bean中,但是当我们需要将依赖项注入到抽象父类时,会遇到一些问题。如果我们直接使用@Autowired注解在抽象父类中,可能不会生效,因为抽象父类不能被实例化。...

    spring 注解Autowired、service、Autowired 的使用

    在Spring框架中,@Autowired注解、Service层以及其使用是核心的编程概念,它们对于理解和构建基于Spring的应用程序至关重要。让我们深入探讨这些知识点。 @Autowired注解是Spring框架的一部分,用于自动装配bean。...

    详解Spring @Autowired 注入小技巧

    在 Spring 框架中,@Autowired 注解是用来实现自动依赖注入的。它可以根据类型(Type)进行自动注入,并且默认注入的 bean 为单例(SingleTon)的。下面我们来详解一些 @Autowired 注解的小技巧。 一、同一类型注入...

    HibernateDaoSupport 与@Autowired

    在Java开发领域,尤其是Spring框架的应用中,`HibernateDaoSupport`和`@Autowired`是两个非常重要的概念。它们分别代表了Hibernate对DAO层的支持以及Spring框架的依赖注入机制。接下来,我们将深入探讨这两个知识点...

Global site tag (gtag.js) - Google Analytics