时间:2021-05-19
自动注入和@Autowire
@Autowire不属于自动注入!
注入方式(重要)
在Spring官网上(文档),定义了在Spring中的注入方式一共有两种:set方法和构造函数。
也就是说,你想在A类里面注入另外一个B类,无论你是通过写 XML文件,或者通过 @Autowried,他们最终都是通过这个A类的set方法或者构造函数,将B类注入到A类中!
换句话说,你如果A类里面没有setB(B b){…},那你就别想通过set方法把B类注入到A类中
自动注入
首先摆出一个比较颠覆的观点:@Autowire不属于自动注入!
如果要讨论自动注入,我们先要了解什么是自动注入,什么是手动注入。
既然是自动,那就代表我啥都不用做,就连一个 @Autowire 我都不加的情况下我让B类注入进A类,这才算真正的自动注入
证明:
首先,我们先看看最原始的,通过xml的注入类:
<bean id="exampleBean" class="examples.ExampleBean"> <!-- setter injection using the nested ref element --> <property name="beanOne"> <ref bean="anotherExampleBean"/> </property></bean><bean id="anotherExampleBean" class="examples.AnotherBean"/>对应的类:
public class ExampleBean { private AnotherBean beanOne; public void setBeanOne(AnotherBean beanOne) { this.beanOne = beanOne; }}这是Spring官网上的一个例子,在最开始,我们通过在XML中追加<property>属性来为类加上其所需要的类。这种手动注入的方式十分的繁琐,所以后面出现了@Autowire注解来进行注入!说白了,就是人们为了偷懒,用一个@Autowire注解代替了写一大串的property属性!(先这么理解,底层源码肯定不是这么做的!)这样的话,还能说 @Autowire 是自动注入了吗?
对于自动注入,在Spring中提供了下面4种方式(甚至我可以更加负责任的告诉你们,在Spring源码中有5种)
先根据官方文档提供的4种方法进行解释:
最开始我有写到,在Spring中,自动注入的方式就只有两种,通过set()方法和构造函数。所以 byName和 byType 都是通过 set()进行装配的。
代码演示:通过byType方式进行自动注入
通过在<beans>标签的末尾加上 default-autowire="byType"来实现Spring的自动注入
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://.spring.autowiringModes.ByTypeDemo"/></beans>Java类:
public class DefaultAutowireService { ByTypeDemo byTypeDemo; public ByTypeDemo getByTypeDemo() { return byTypeDemo; } public void setByTypeDemo(ByTypeDemo byTypeDemo) { this.byTypeDemo = byTypeDemo; }}启动类:
public class XmlTest { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); DefaultAutowireService bean = context.getBean("defaultAutowireService", DefaultAutowireService.class); System.out.println(bean.getByTypeDemo()); }}控制台:
如果这时我们把xml文件中的default-autowire去掉,重新启动程序并查看控制台:
纸上得来终觉浅,绝知此事要躬行!希望大家也可以自己写写代码再验证一下!
总结
到此这篇关于你所不知道的Spring自动注入详解的文章就介绍到这了,更多相关Spring自动注入内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
PowerShell的一个重中之重的功能就是管道(pipeline),本文从浅入深,一步一步详解管道的使用方法和例子,来看看有没有你所不知道的吧,如果全知道,恭
在springboot中使用quartz时,在job中一般需要引用spring管理的bean,通过定义jobfactory实现自动注入。spring有自己的sc
一般而言,Spring的依赖注入有三种:构造器注入、setter注入以及接口注入。本文主要讲构造器注入与setter注入。1、构造器注入为了让Spring完成构
Spring的依赖注入Spring主要支持两种依赖注入方式,分别是属性注入和构造函数注入。同时也支持工厂方法注入方式。属性注入属性注入的方式非常简单,即指通过s
前言我们经常会被问到这么一个问题:SpringBoot相对于spring有哪些优势呢?其中有一条答案就是SpringBoot自动注入。那么自动注入的原理是什么呢