Spring中@Autowire注入的深入讲解

 更新时间:2020年09月20日 15:12:55   作者:Real dream  
这篇文章主要给大家介绍了关于Spring中@Autowire注入的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一直在思考spring的@Autowire注入属性时到底是按类型注入还是按名称注入,今天写了一个测试来证明一下。

定义接口TestService

public interface TestService {
 void test();
}

定义接口实现:TestServiceImpl1和TestServiceImpl2

@Service
public class TestServiceImpl1 implements TestService {

 public void test() {
  System.out.println(1111);
 }
}
@Service
public class TestServiceImpl2 implements TestService {

 public void test() {
  System.out.println(2222);
 }
}

定义一个bean依赖TestService,

@Controller
public class TestController {
	//此时的beanBame=testService
 @Autowired
 TestService testService;

 public void test(){
  testService.test();
 }
}

编写测试类:

@Configuration
@ComponentScan("test")
public class Test {
 public static void main(String[] args) {
  AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext();
  context.register(Test.class);
  context.refresh();
  TestService bean = context.getBean(TestService.class);
  bean.test();
 }
}

启动项目跟踪源码:在spring工厂初始化Bean填充属性的时候,AbstractAutowireCapableBeanFactory.populateBean()方法中会执行后置处理器AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues() ,继续跟踪,在DefaultListableBeanFactory.doResolveDependency()方法中的findAutowireCandidates()根据类型匹配到两个Bean,见截图:

由于获取的Bean超过两个,spring会根据名称去匹配,如果匹配成功则返回对应的bean;如果匹配失败,则会抛出异常。如图:

到此为止,我们已经能发现@Autowire注解注入属性的原理:先根据类型注入,如果获取到多个Bean,则根据名称匹配,若名称未匹配上就抛出异常。

总结

到此这篇关于Spring中@Autowire注入的文章就介绍到这了,更多相关Spring中@Autowire注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详谈锁和监视器之间的区别_Java并发

    详谈锁和监视器之间的区别_Java并发

    下面小编就为大家带来一篇详谈锁和监视器之间的区别_Java并发。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 简单理解Java的抽象类

    简单理解Java的抽象类

    这篇文章主要介绍了Java的抽象类,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Java验证时间格式是否正确方法类项目实战

    Java验证时间格式是否正确方法类项目实战

    在很多场景中我们需要验证时间日期的是否属于正确的格式,验证时间是否符合常规的,本文就来介绍一下几种方式,感兴趣的可以了解一下
    2022-04-04
  • 彻底解决Spring MVC中文乱码问题的方案

    彻底解决Spring MVC中文乱码问题的方案

    这篇文章主要介绍了彻底解决Spring MVC中文乱码问题的方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • 深入理解Java中的并发工具类CountDownLatch

    深入理解Java中的并发工具类CountDownLatch

    CountDownLatch 作为 Java 中的一个同步工具类,用于在多线程间实现协调和控制,本文主要来和大家讲解一下JUC 工具类 CountDownLatch的使用,需要的可以参考一下
    2023-07-07
  • Java毕业设计实战之二手书商城系统的实现

    Java毕业设计实战之二手书商城系统的实现

    这是一个使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP开发的二手书商城系统,是一个毕业设计的实战练习,具有在线书城该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01
  • java 获取当前时间的三种方法

    java 获取当前时间的三种方法

    这篇文章主要介绍了java 获取当前时间的三种方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • spring-data-redis自定义实现看门狗机制

    spring-data-redis自定义实现看门狗机制

    redission看门狗机制是解决分布式锁的续约问题,本文主要介绍了spring-data-redis自定义实现看门狗机制,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Java中SPI机制的实现详解

    Java中SPI机制的实现详解

    SPI(Service Provider Interface),是 JDK 内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,下面我们就来看看Java中SPI机制的具体实现
    2024-01-01
  • Spring多数据源导致配置失效的解决

    Spring多数据源导致配置失效的解决

    这篇文章主要介绍了Spring多数据源导致配置失效的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论