@Autowired深入理解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Jatham/article/details/100058710

@Autowired很简单吗?

后端开发中,使用Spring框架最多,它提供的自动注入方式极大的方便了程序的开发,而且开发中应用最多的可能就是@Autowired注解了,但是,我们真的理解了作者的初衷了吗?真的了解它的原理了吗?知道它的所有应用场景了吗?还有它的注意事项?想想这些,我都觉得很有必要深入了解下这些,抽时间总结总结,在这里先埋下坑,天堂有路我不走,非要挖坑自己来。八月份有有的写了。。。

官方解释

  1. 标记一个构造器、属性字段、setter方法或者配置方法,来完成自动装配,通过spring的依赖注入特性。它是jsr-330的@Inject注解的一个替代品,
  2. 对于给定的bean类,只能有一个构造器可以使用具有required=true的@Autowoird注解,indicating the constructor to autowire when used as a Spring bean(英语功力不够,怎么翻译都觉得不如原版的好)。并且,如果required属性被设置为true,那么只能有一个单独的构造器可以使用@Autowired注解。如果有多个声明了non-required属性的构造器,他们都将被考虑作为自动注入的候选者。当然,只有拥有最有数量依赖的构造器can be satisfied 会被spring 容器选择到。如果在这些构造器中没有合适的候选者,将会使用一个默认的构造器。如果一个类只声明了一个构造器,那么他将会一直被使用。即使这个构造器没有被@Autowired注解。
  3. Fields会在bean的构造器之后被正确注入,而且是在任何配置方法加载之前。
  4. 配置方法可能会有任意的名字并且任意数量的参数,这些参数的任意一个都将会被自动注入到一个匹配的spring容器中的bean中。
  5. 在注解一个多参数的构造器或者多参数的方法下,‘required’参数适用于所有的参数。单独的parameters may be declared as java-8 -style Optional
  6. 在注解collection或者map依赖类型的情况下,容器会自动注入所有匹配到声明类型的bean。并且如果是注释到map上,那么map的key必须声明为string类型,并以key作为bean的名字。这样的一个被容器提供的collection将会是有序的,
  7. autowired的本质注入是通过BeanPostProcessor来完成的,所以也就不能将autowired使用在BeanPostProcessor或者BeanFactoryPostProcessor等接口的实现类上。

猜你喜欢

转载自blog.csdn.net/Jatham/article/details/100058710