今天在研究了下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方式注入的
分享到:
相关推荐
在Spring Boot应用中集成Apache Shiro进行权限...同时,确保所有依赖都遵循Spring的依赖注入规则,才能使`@Autowired`注解生效。这样不仅可以解决注入问题,还能充分利用Spring的特性,提高代码的可维护性和灵活性。
在Spring框架中,`@Autowired`注解是一种自动装配依赖的方式,它允许开发者在不编写显式依赖注入代码的情况下,自动将Bean的依赖注入到需要的地方。本文将深入探讨`@Autowired`的实现原理。 1. **BeanPostProcessor...
最后,Spring的@Autowired注解在版本3.2.3.RELEASE中,其类型的自动装配机制可能根据匹配规则有所不同,但基本原理是先尝试类型匹配,如果找不到合适的bean,再尝试按字段名匹配。 总结来说,@Autowired、@Inject和...
总的来说,Spring的类型自动装配机制是通过扫描和解析bean定义,结合@Autowired、@Qualifier等注解,以及bean工厂的方法,实现依赖的自动查找和注入。理解这一机制有助于我们更好地设计和维护Spring应用,减少手动...
当Spring容器在bean的属性上发现@Autowired注解时,如果没有指定qualifier,那么Spring会尝试找到一个与该属性名称相同的bean来注入。 2. **byType**:基于bean的类型进行自动装配。如果一个bean的属性类型在Spring...
在Spring框架中,自动检测注解(Autowired)是核心特性之一,它极大地简化了依赖注入的过程,使得开发者能够更加专注于业务逻辑,而不是繁琐的配置。本文将深入探讨Spring中的自动检测注解及其工作原理。 首先,`@...
当Spring遇到带有`@Autowired`注解的字段或方法时,会调用`processInjection`方法进行注入。 3. `doResolveDependency` 方法 该方法是实际的依赖解析逻辑,它会根据注解的配置,遍历Bean定义,寻找匹配的候选Bean。...
使用@Autowired注解,我们可以告诉Spring容器需要自动装配的属性,Spring容器会在运行时检查类型匹配,并自动将相应的Bean注入到相应的字段或者方法中。 在Spring MVC中,Controller层通常与当前的HTTP请求紧密关联...
理解`@Resource`注解的工作机制和与`@Autowired`的区别,有助于优化Spring容器的依赖注入,避免潜在的注入错误。在选择使用哪种注解时,开发者应根据项目需求和bean的命名规则来决定。同时,结合使用`@Qualifier`和`...
同时,MyBatis-Spring模块提供了对Spring的集成,使得MyBatis的SqlSession管理更加方便,可以通过`@Autowired`注解注入SqlSessionFactory或SqlSessionTemplate。 Spring框架是Java企业级应用的核心,提供了依赖注入...
Spring在处理@Autowired或@Resource注解时,会根据注解的规则寻找合适的bean进行注入。让我们详细了解一下这两个注解的工作原理。 首先,@Autowired是Spring提供的注解,主要用于依赖注入(DI, Dependency Injection...
使用 @Autowired 后,不需要 getter() 和 setter() 方法,Spring 也会自动注入。 初始化和销毁方法 在 Spring 框架中,可以使用 @PostConstruct 和 @PreDestroy 注解来指定初始化和销毁方法。例如: @...
匹配依赖的规则基于类型,即Spring会尝试找到类型相同的Bean来注入。如果存在多个相同类型的Bean,可以通过`@Qualifier`注解指定特定的Bean。 除了`@Autowired`,Spring还提供了`@Resource`注解,它的行为与`@...
在Spring 3.0版本中,注解(Annotation)的应用极大地简化了框架的配置和代码的编写,使得Java开发者能够更加优雅地实现依赖注入、AOP(面向切面编程)等核心功能。本文将深入探讨Spring 3.0中注解的运用,包括其重要...
例如,UserService接口可以包含新增用户、删除用户、修改用户信息等方法,UserServiceImpl实现这些方法,并通过@Autowired注入DAO实现类。 在SpringMVC部分,创建Controller层,它是处理HTTP请求的核心。为每个业务...
`@Autowired`注解用于自动装配Spring容器管理的Bean。在控制器类中,它可以被用来注入依赖的服务或组件,从而实现依赖注入(DI)。这不仅提高了代码的可读性和可维护性,还使得组件间的耦合度降低,更易于测试和扩展...
在Spring框架中,面试常涉及的关键知识点包括Spring的IoC(控制反转)、依赖注入、Bean的生命周期、AOP(面向切面编程)、事务管理、设计模式以及特定的类和注解如`@Service`、`@Repository`和`ThreadLocal`的使用。...
综上所述,Spring Bean重复执行两次的问题通常是由于配置错误、依赖注入循环、初始化回调的不当使用、静态工厂方法的误用、AOP代理的配置问题或是Bean作用域设置不准确导致的。通过仔细检查和修正这些问题,可以避免...
在Spring框架中,自动装配是指Spring容器根据预定义的规则,自动为Bean注入所需的依赖。而注解自动装配是其中的一种方式,它允许开发者使用注解(如@Autowired、@Resource等)在类或方法级别声明依赖关系,而无需在...