说起spring的注入,可能大家都有了解 。可你认知几种注入方式呢?你所认知的注入方式是否正确呢?我估计大多数人了解注入方式不全面,并且还会曲解一些概念 。今天我们就参考最权威的官网来具体谈谈spring的注入方式 。这里想给大家复习一下Spring的基础知识,对于后续理解有很大帮助
IOC&&DI想必关于这两个概念大家不会陌生,面试题经常会出现的 。这里我们就从官网详细文档看一看 。
文章插图
详细的翻译具体概念我就不讲了,在这我只说出自己的理解【spring注入你真搞懂了吗?不会一直都是这样错误理解吧?】其实IOC也被称为DI,因为在spring中IOC作用就是不需要程序员来手动创建和管理JAVA类,而是由spring容器自动实例化Bean对象 。怎么个IOC呢,其实就是通过DI(依赖注入)实现的 。
补充一点关于spring的bean对象(后面简称bean)
其实bean对象就是java对象,不同的在于Bean对象是由spring创建管理对象 。
bean对象 是 java对象,但java对象 不一定是 bean对象
文章插图
我们的业务类,经过spring容器DI添加源数据从而生成一个Bean对象可以被使用 。这也就是spring IOC容器的运行流程图 。
Configuration Metadata(IOC)关于配置元数据,spring官方文档给出了三种配置方式
- XML-based metadata 1.0版本
- Annotation-based configuration 2.5版本
- Java-based configuration 3.0版本
虽说三种,但其实我接触也只有前两种 。本文也是关于前两种详细介绍 。基于 XML 的 bean 注入方式
xml手动配置bean (自动装配可以通过set方法自动创建pojo类对象加上元数据信息构造成bean对象)基于 XML 的 bean 注入方式的实现有三种方法:
- xml配置ref
- 属性 setter方法注入(或设值注入)
- 构造方法注入
文章插图
关于自动模型官网上解释说:当使用基于xml的注入方式时,可以指定自动连接模式Autowiring Collaborators(自动注入的模型)
也就是说spring 的自动注入的模型 (仅仅针对xml-based配置)
使用java,annotation另外两种注入方式没有注入模型
文章插图
- no :(默认)没有自动装配 。Bean引用必须由ref元素定义 。
- byname:通过名称查找bean自动装配属性 。
- bytype:通过类型找bean,根据set或者构造方法注入
- construct 推断构造方法 通过构造方法自动配置,如果多个构造方法选择多个参数的构造方法
@Autowired和@Resource两个注解实现 。面试题中也经常会问到两个注解的区别,我搜索网上的答案却讲的是@Autowired是通过bytype,@Resource是通过byname 。但这种理解显然是错误的,因为关于自动模型文章前面也已经说过 官网:当使用基于xml的注入方式时,可以指定自动连接模式@Autowired和@Resource只不过是通过type,name去查找,而不是bytype以及byname模式 。有什么区别?
区别在于byname通过名字找bean自动填充–>没找到就会报错
bytype通过类型去找bean自动填充–>没找到就会报错
1. @Autowired:type --> name --> error
不仅仅通过type找 。type找不到,还可以通过name找 。都找不到才会报错
spring包中的AutowiredAnnotationBeanPostProcessor.java中的一个方法实现解析的
2. @Resource:name --> type --> error
不仅仅通过name找 。name找不到,还可以通过type找 。都找不到才会报错
javax中的 commonAnnotationBeanPostProcessor.java中的一个方法实现解析的
这里再强调一下:怎么说?还相信网上的知识点吗?不相信我说的?那可以我们还是来用code证明 。
注解 无关注入的模型(no,byname,bytype,constract)
Talk is cheap,show you my code准备阶段
文章插图
推荐阅读
- 抖音小店无货源店群大揭秘,这些你真的清楚吗?
- 如何给WINDOWS 7注入USB和NVME驱动?
- 玩转SpringBoot之整合 shiro 权限框架
- Spring Boot 12 国际化
- 什么是计时攻击?Spring Boot 中该如何防御?
- SpringBoot-登录验证码实现
- 跟常用框架SpringSecurity比 微服务到底胜在哪?
- 大牛教大家如何用SpringBoot技术快速实现天气预报系统
- 欧拉|比男人更懂女人 欧拉注入“她力量”:最爱女性的汽车倾力打造“她生态”
- 如何按照条件向Spring容器中注册bean?这次我懂了