Spring5.X bean自动装配Autowire属性
属性注入
- set方法、构造函数、POJO、list、map、ref,属于手工注入,点我直达
Spring自动注入
- 使用<bean>元素的autowire属性为一个bean定义指定自动装配模式
- autowire设置值
- no:没有开启
- byName:根据bean的id名称,注入到对应的属性里面
- byType:根据bean需要注入的类型,注入到对应的属性里面
- 如果按照类型注入,存在2个以上bean的话会抛异常
- expected single matching bean but found 2
- construcctor:通过构造函数注入,需要这个类型的构造函数
byName演示
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="video" class="net.cybclass.sp.domain.Video">
<property name="id" value="8"></property>
<property name="title" value="SpringBoot课程专题"></property>
</bean>
<bean id="videoOrder" class="net.cybclass.sp.domain.VideoOrder" autowire="byName">
<property name="id" value="8"></property>
<property name="outTradeNo" value="12312"></property>
</bean>
</beans>
Video.java
package net.cybclass.sp.domain;
public class Video {
public Video()
{
System.out.println("Video 默认空构造函数被调用");
}
{
System.out.println("Video 构造块被调用");
}
static
{
System.out.println("Video static 静态代码块被调用");
}
public void init()
{
System.out.println("Video init 被调用类");
}
public void destroy()
{
System.out.println("Video destroy 被调用类");
}
private int id;
private String title;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Video{" +
"id=" + id +
", title='" + title + '\'' +
'}';
}
}
VideoOrder.java
package net.cybclass.sp.domain;
public class VideoOrder {
private int id;
//订单号
private String outTradeNo;
private Video video;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public Video getVideo() {
return video;
}
public void setVideo(Video video) {
this.video = video;
}
@Override
public String toString() {
return "VideoOrder{" +
"id=" + id +
", outTradeNo='" + outTradeNo + '\'' +
", video=" + video +
'}';
}
}

从上我们可以看到byName注入,自动获取bean的id等于video的,当修改bean的id的值为video2的时候,就自动注入不到值类
byType演示

下面演示注册2次bean的,会抛异常

expected single matching bean but found 2: video2,video3
constructor演示
为VideoOrder.java添加构造函数

修改applicationContext.xml


底层也是根据byType注入的

Spring5.X bean自动装配Autowire属性的更多相关文章
- Spring学习记录(三)---bean自动装配autowire
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...
- spring——bean自动装配
注意:自动装配功能和手动装配要是同时使用,那么自动装配就不起作用. beans.xml <?xml version="1.0" encoding="UTF-8&qu ...
- Spring XML配置里的Bean自动装配
Spring自动装配 这段是我们之前编写的代码,代码中我们使用了P命名空间 并且使用手动装配的方式将car <bean id="address" class="cn ...
- Spring点滴十:Spring自动装配(Autowire)
在基于XML配置元数据,在bean的配置信息中我们可以使用<constructor-arg/>和<property/>属性来实现Spring的依赖注入.Spring 容器也可以 ...
- Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.k ...
- Spring - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
1 Autowire自动装配1.1 使用:只需在<bean>中使用autowire元素<bean id="student" class="com.kej ...
- SpringXML方式配置bean的自动装配autowire
Spring的自动装配,也就是定义bean的时候让spring自动帮你匹配到所需的bean,而不需要我们自己指定了. 例如: User实体类里面有一个属性role 1 2 3 4 5 6 7 publ ...
- XML 配置里的 Bean 自动装配
在XML文件中,先看一下下面的代码: <bean id="student" class="com.jeremy.spring.beans.student" ...
- XML配置里的Bean自动装配与Bean之间的关系
需要在<bean>的autowire属性里指定自动装配的模式 byType(根据类型自动装配) byName(根据名称自动装配) constructor(通过构造器自动装配) 名字须与属性 ...
- Spring Bean自动装配有哪些方式?
Spring 容器能够自动装配 Bean .也就是说,可以通过检查 BeanFactory 的内容让 Spring 自动解析 Bean 的协作者. 自动装配的不同模式: no - 这是默认设置,表示没 ...
随机推荐
- vue中v-for说明
v-if vs v-show区别v-if:每次显示与否,都会执行销毁和重建,渲染开销较大v-show:始终会被渲染并保留在DOM中.只是简单地切换display属性.频繁切换的时候用v-if,较少切换 ...
- C++ 类的继承(Inheritance)
一.继承(Inheritance) C++有一个很好的性质称为inheritance(继承),就是声明一个class(derived class),把另一个或多个class(base class)的所 ...
- C 语言编程 — 异常处理
目录 文章目录 目录 前文列表 异常处理 perror() 和 strerror() 输出异常信息 程序退出状态 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基 ...
- Machine Learning - 笔记1
一.监督学习(supervised learning) 1.回归(regression) ①按我的理解来说,就是对于训练模型所用到的数据集,能够知道Input和Output的特征.比如 ...
- 开源项目 cloud-platform 的本地部署
F7 单步调试,进入函数内部 F8 单步调试,不进入函数内部 F9 继续执行,进入下一个断点或执行完程序 Shift+F7 选择要进入的函数 Shift+F8 跳出函数 Ctrl+F8 设置/取消当前 ...
- ModelScope初体验
使用环境:windows 11 前置条件:已安装 anaconda 参考文档:环境安装 step1:新建一个 conda 环境,命名为 modelscope conda create -n model ...
- opencv-python 实现鱼眼矫正 棋盘矫正法
.htmledit_views address, .htmledit_views cite, .htmledit_views dfn, .htmledit_views em, .htmledit_vi ...
- LlamaFS自组织文件管理器
LlamaFS是一个自组织文件管理器.它可以基于文件内容和修改时间等属性自动重命名和组织您的文件.它能让你不把时间花在对文件的复制.粘贴.重命名.拷贝.排序等简单操作上.有幸在Github上看到Lla ...
- 深入探讨Function Calling:在Semantic Kernel中的应用实践
引言 上一章我们熟悉了 OpenAI 的 function calling 的执行原理,这一章节我们讲解一下 function calling 在 Semantic Kernel 的应用. 在Open ...
- java中SimpleDateFormat解析日期格式的问题
在日常写代码的过程中,我们经常要处理各种格式的日期,常见的日期格式有:"20240601","2024-06-01","2024-6-1". ...