Spring中实现自动装配的方式:
(1)通过XML文件。
(2)通过注解。
既然有自动装配,就说明有手动装配,什么是手动装配呢?下面用一个例子来解释:
1.1 手动装配
实体类Book:
public class Book {
private int id;
private String name;
//get,set,有参构造,无参构造
}
实体类Teacher:
public class Teacher {
private int id;
private String name;
//get,set,有参构造,无参构造
}
实体类:Student
public class Student {
private String name;
private Teacher teacher;
private Book book;
//get,set,有参构造,无参构造
}
XML配置:
可以看到,我们配置Student这个Bean时,是需要我们手动地将Book和Teacher进行装配进去的,这种方式就是手动装配。
二、自动装配
======
接下来开始讲自动装配
2.1通过XML文件
其种类有:
(1)byName根据属性名称自动注入
(2) byType根据属性类型自动注入
2.1.1 byName根据属性名称自动注入
注意看student,这时并不需要进行手动装配Book和Teacher了。
实现机制:
第一步:Spring会根据class属性找到实体类
第二步:查询实体类中所有set方法的名字
第三步:根据set方法后面的名字,首字母小写(如setBook(),那其后面名字为book)
第四步: 根据这个名字,再到配置文件中寻找一个与该名字相同id的Bean,注入进来。
也就是说如果在配置文件中查找不到你的set方法后面的名字并且没有相应的类型(唯一),那么就无法完成注入。
2.1.2 byType根据属性类型自动注入
XML配置文件:
注意:
(1)根据需要注入的属性的类型来完成对属性的注入,并不对bean的id作要求
(2)同一类型的对象,在spring容器中唯一。如果不唯一,会报不唯一的异常,因为其是根据类型来注入的,多个相同类型Spring就不知道需要注入哪一个了。
2.2 通过注解实现
注解是通过反射来实现的。
准备工作
(1)在spring配置文件中引入context文件头
xmlns:context=“http://www.springframework.org/schema/context”
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
(2)开启属性注解支持
必须要写在xml中,这是用来开启注解的支持,如果不加上注解就无效。
context:annotation-config/
2.2.1 @Autowired
XML文件
注解实现
public class Student {
private String name;
@Autowired
private Teacher teacher;
@Autowired
private Book book;
//set,get,有参构造,无参构造
}
在实体类的对应属性上添加@Autowired注解(也可以把注解放到对应属性的set方法上)
注解方法装配属性过程:
(1)spring会默认优先根据(被注解修饰的)属性类型去容器中找对应的组件(bean),找到就赋值;
(2)若找到多个相同类型的组件,再将属性的名称作为组件(bean)的id去容器中查找。
扩展:
@Autowired(required=false) 说明:
**false:**对象可以为null;等于告诉 Spring:在找不到匹配 Bean 时也不报错。
true:对象必须存对象,不能为null。
注意:当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用@Autowired(required= false)。这等于告诉 Spring:在找不到匹配 Bean 时也不报错。
2.2.2 @Qualifier注解
注意:不可以单独使用
可以和使用Autowired搭配使用:@Qualifier指定需要装配的组件的id,而不是使用属性名。
如下,spring就会优先在容器中查找id为bean1的组件。
public class Student {
private String name;
@Autowired
@Qualifier(“bean1”)
private Teacher teacher;
@Autowired
private Book book;
//set,get,有参构造,无参构造
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/17df618f6c848b3919f2851a699bef9e.jpeg)
结尾
这不止是一份面试清单,更是一种”被期望的责任“,因为有无数个待面试者,希望从这篇文章中,找出通往期望公司的”钥匙“,所以上面每道选题都是结合我自身的经验于千万个面试题中经过艰辛的两周,一个题一个题筛选出来再次对好答案和格式做出来的,面试的答案也是再三斟酌,深怕误人子弟是小,影响他人仕途才是大过,也希望您能把这篇文章分享给更多的朋友,让他帮助更多的人,帮助他人,快乐自己,最后,感谢您的阅读。
由于细节内容实在太多啦,在这里我花了两周的时间把这些答案整理成一份文档了,在这里只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
style=“zoom: 33%;” />
结尾
[外链图片转存中…(img-uHzDiI50-1713441090078)]
这不止是一份面试清单,更是一种”被期望的责任“,因为有无数个待面试者,希望从这篇文章中,找出通往期望公司的”钥匙“,所以上面每道选题都是结合我自身的经验于千万个面试题中经过艰辛的两周,一个题一个题筛选出来再次对好答案和格式做出来的,面试的答案也是再三斟酌,深怕误人子弟是小,影响他人仕途才是大过,也希望您能把这篇文章分享给更多的朋友,让他帮助更多的人,帮助他人,快乐自己,最后,感谢您的阅读。
由于细节内容实在太多啦,在这里我花了两周的时间把这些答案整理成一份文档了,在这里只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!