`

Spring的@Autowired注入规则

阅读更多

今天在研究了下spring的@Autowired的注入方式

@Autowired 默认是按照byType进行注入的,但是当byType方式找到了多个符合的bean,又是怎么处理的?


经过一些代码的测试,我发现,Autowired默认先按byType,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。

例子:

@Autowired
private ExamUserMapper examUserMapper;  - ExamUserMapper是一个接口


1. spring先找类型为ExamUserMapper的bean

2. 如果存在且唯一,则OK;

3. 如果不唯一,在结果集里,寻找name为examUserMapper的bean。因为bean的name有唯一性,所以,到这里应该能确定是否存在满足要求的bean了


@Autowired也可以手动指定按照byName方式注入,使用@Qualifier标签,例如:
@Autowired () @Qualifier ( "baseDao" )

因为bean的name具有唯一性,理论上是byName会快一点,但spring默认使用byType的方式注入,让我很迷惑,确定不了哪一个真的快。具体到实际应用,感觉差别不大,就看大家的习惯

另注:@Resource(这个注解属于J2EE的)的标签,默认是按照byName方式注入的
分享到:
评论

相关推荐

    SpringBoot集成shiro,MyRealm中无法@Autowired注入Service的问题

    在Spring Boot应用中集成Apache Shiro进行权限...同时,确保所有依赖都遵循Spring的依赖注入规则,才能使`@Autowired`注解生效。这样不仅可以解决注入问题,还能充分利用Spring的特性,提高代码的可维护性和灵活性。

    你所不知道的Spring的@Autowired实现细节分析

    在Spring框架中,`@Autowired`注解是一种自动装配依赖的方式,它允许开发者在不编写显式依赖注入代码的情况下,自动将Bean的依赖注入到需要的地方。本文将深入探讨`@Autowired`的实现原理。 1. **BeanPostProcessor...

    Java-Spring各种依赖注入注解的区别.doc

    最后,Spring的@Autowired注解在版本3.2.3.RELEASE中,其类型的自动装配机制可能根据匹配规则有所不同,但基本原理是先尝试类型匹配,如果找不到合适的bean,再尝试按字段名匹配。 总结来说,@Autowired、@Inject和...

    Spring由类型(Type)自动装配源码

    总的来说,Spring的类型自动装配机制是通过扫描和解析bean定义,结合@Autowired、@Qualifier等注解,以及bean工厂的方法,实现依赖的自动查找和注入。理解这一机制有助于我们更好地设计和维护Spring应用,减少手动...

    spring学习之四“自动装配”

    当Spring容器在bean的属性上发现@Autowired注解时,如果没有指定qualifier,那么Spring会尝试找到一个与该属性名称相同的bean来注入。 2. **byType**:基于bean的类型进行自动装配。如果一个bean的属性类型在Spring...

    Spring demo 自动检测注解

    在Spring框架中,自动检测注解(Autowired)是核心特性之一,它极大地简化了依赖注入的过程,使得开发者能够更加专注于业务逻辑,而不是繁琐的配置。本文将深入探讨Spring中的自动检测注解及其工作原理。 首先,`@...

    3Spring使用annotation方式autowire

    当Spring遇到带有`@Autowired`注解的字段或方法时,会调用`processInjection`方法进行注入。 3. `doResolveDependency` 方法 该方法是实际的依赖解析逻辑,它会根据注解的配置,遍历Bean定义,寻找匹配的候选Bean。...

    详解Spring Controller autowired Request变量

    使用@Autowired注解,我们可以告诉Spring容器需要自动装配的属性,Spring容器会在运行时检查类型匹配,并自动将相应的Bean注入到相应的字段或者方法中。 在Spring MVC中,Controller层通常与当前的HTTP请求紧密关联...

    springmvc @Resource 注解方式问题

    理解`@Resource`注解的工作机制和与`@Autowired`的区别,有助于优化Spring容器的依赖注入,避免潜在的注入错误。在选择使用哪种注解时,开发者应根据项目需求和bean的命名规则来决定。同时,结合使用`@Qualifier`和`...

    struts2+mybatis+spring 注解很好的例子

    同时,MyBatis-Spring模块提供了对Spring的集成,使得MyBatis的SqlSession管理更加方便,可以通过`@Autowired`注解注入SqlSessionFactory或SqlSessionTemplate。 Spring框架是Java企业级应用的核心,提供了依赖注入...

    详解Spring中接口的bean是如何注入的

    Spring在处理@Autowired或@Resource注解时,会根据注解的规则寻找合适的bean进行注入。让我们详细了解一下这两个注解的工作原理。 首先,@Autowired是Spring提供的注解,主要用于依赖注入(DI, Dependency Injection...

    Spring的自动扫描注入.docx

    使用 @Autowired 后,不需要 getter() 和 setter() 方法,Spring 也会自动注入。 初始化和销毁方法 在 Spring 框架中,可以使用 @PostConstruct 和 @PreDestroy 注解来指定初始化和销毁方法。例如: @...

    使用注解自动装配需要组件扫描.zip

    匹配依赖的规则基于类型,即Spring会尝试找到类型相同的Bean来注入。如果存在多个相同类型的Bean,可以通过`@Qualifier`注解指定特定的Bean。 除了`@Autowired`,Spring还提供了`@Resource`注解,它的行为与`@...

    Spring3.0中annotaion的运用

    在Spring 3.0版本中,注解(Annotation)的应用极大地简化了框架的配置和代码的编写,使得Java开发者能够更加优雅地实现依赖注入、AOP(面向切面编程)等核心功能。本文将深入探讨Spring 3.0中注解的运用,包括其重要...

    利用IDEA搭建的hibernate+Spring+SpringMVC架构实现增删改查等功能

    例如,UserService接口可以包含新增用户、删除用户、修改用户信息等方法,UserServiceImpl实现这些方法,并通过@Autowired注入DAO实现类。 在SpringMVC部分,创建Controller层,它是处理HTTP请求的核心。为每个业务...

    使用 Spring 2.5 基于注解驱动的 Spring.pdf

    `@Autowired`注解用于自动装配Spring容器管理的Bean。在控制器类中,它可以被用来注入依赖的服务或组件,从而实现依赖注入(DI)。这不仅提高了代码的可读性和可维护性,还使得组件间的耦合度降低,更易于测试和扩展...

    高级开发spring面试题和答案.pdf

    在Spring框架中,面试常涉及的关键知识点包括Spring的IoC(控制反转)、依赖注入、Bean的生命周期、AOP(面向切面编程)、事务管理、设计模式以及特定的类和注解如`@Service`、`@Repository`和`ThreadLocal`的使用。...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    综上所述,Spring Bean重复执行两次的问题通常是由于配置错误、依赖注入循环、初始化回调的不当使用、静态工厂方法的误用、AOP代理的配置问题或是Bean作用域设置不准确导致的。通过仔细检查和修正这些问题,可以避免...

    AOP中的注解自动装配通知

    在Spring框架中,自动装配是指Spring容器根据预定义的规则,自动为Bean注入所需的依赖。而注解自动装配是其中的一种方式,它允许开发者使用注解(如@Autowired、@Resource等)在类或方法级别声明依赖关系,而无需在...

Global site tag (gtag.js) - Google Analytics