Spring自动装配-autowire
目录
- 1.自动装配-autowire
- 2.autowire的四种模式
- 3.使用自动装配
- 3.1 使用byName自动装配
- 3.2 使用byType自动装配
- 资源类和配置文件
1.自动装配-autowire
使用基于 XML 的配置bean时,可以使用<bean / > 元素的autowire属性为 bean 定义指定自动装配模式。
自动装配具有以下优点:
- 自动装配可以大大减少指定属性或构造函数参数的需要
- 随着对象的 Developing,自动装配可以更新配置。
但是也有些局限性和缺点:
- property和constructor-arg设置中的显式依赖项始终会覆盖自动装配。
- 自动装配不如显式接线精确。
- 接线信息可能不适用于可能从 Spring 容器生成文档的工具。
- 容器内的多个 bean 定义可能与要自动装配的 setter 方法或构造函数参数指定的类型匹配。对于数组,集合或Map实例,这不一定是问题。但是,对于需要单个值的依赖项,不会任意解决此歧义。如果没有唯一的 bean 定义可用,则引发异常。
2.autowire的四种模式
模式 | 解释 |
---|---|
no | (默认)无自动装配。 |
byName | 按属性名称自动装配 |
byType | 如果容器中恰好存在一个该属性类型的 bean,则使该属性自动装配。 |
constructor | 类似于byType,但适用于构造函数参数。 |
常用的为byName和byType
通俗来说:
byName:需要保证所有bean的id唯一,并且需要和自动装配的属性的set方法的值一致。
byType:需要保证所有的bean的calss唯一,并且这个bean需要和自动装配的属性类型一致。
3.使用自动装配
3.1 使用byName自动装配
<bean id="cat" class="com.tang.pojo.Cat"/><!-- 注意此时的id不一样 --><bean id="dog22222" class="com.tang.pojo.Dog"/><!-- 自动装配--><bean id="people" class="com.tang.pojo.People" autowire="byName"><property name="name" value="一个人" /></bean>
注意:
byName会在上下文中查找和自己对象set后面的方法一致的beanid,如果不一致,就会报空指针异常
3.2 使用byType自动装配
<bean id="cat" class="com.tang.pojo.Cat"/><bean id="dog22222" class="com.tang.pojo.Dog"/><!-- 自动装配--><bean id="people" class="com.tang.pojo.People" autowire="byType"><property name="name" value="一个人" /></bean>
注意:
byType会在上下文中查找和自己对象属性类型相同的bean
资源类和配置文件
实体类:
public class Cat {public void shout(){System.out.println("喵喵~");}
}
public class Dog {public void shout(){System.out.println("汪汪~");}
}
public class People {private Cat cat;private Dog dog;private String name;public Cat getCat() {return cat;}public void setCat(Cat cat) {this.cat = cat;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "People{" +"cat=" + cat +", dog=" + dog +", name='" + name + '\'' +'}';}
}
beans.xml:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="cat" class="com.tang.pojo.Cat"/><bean id="dog22222" class="com.tang.pojo.Dog"/><!-- 自动装配--><bean id="people" class="com.tang.pojo.People" autowire="byType"><property name="name" value="一个人" /></bean></beans>
测试类:
public class MyTest {@Testpublic void test01(){ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");People people = context.getBean("people", People.class);people.getCat().shout();people.getDog().shout();}
}
Spring自动装配-autowire相关推荐
- Spring自动装配(autowire)篇
什么是自动装配 自动装配帮我们省去了 property标签配置操作,Spring会自动根据 属性名称,类型,构造器来进行自动注入. 例如不进行自动装配配置如下: <bean id="u ...
- Spring自动装配 autowire
什么是自动装配? 自动装配就是让应用程序上下文为你找出依赖项的过程.说的通俗一点,就是Spring会在上下文中自动查找,并自动给bean装配与其关联的属性! spring中实现自动装配的方式有两种,一 ...
- Spring 自动装配 ‘byType’
转载自 Spring 自动装配 'byType' Spring 自动装配 'byType' 这种模式由属性类型指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans ...
- Spring 自动装配 ‘byName’
转载自 Spring 自动装配 'byName' Spring 自动装配 'byName' 这种模式由属性名称指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 ...
- spring自动装配依赖包_解决Spring自动装配中的循环依赖
spring自动装配依赖包 我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践. 使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加. 服务层中的每个服务可能会消耗其他服 ...
- spring自动装配、注解
spring自动装配 Spring 自动装配 byName 这种模式由属性名称指定自动装配.Spring 容器看作 beans,在 XML 配置文件中 beans 的 auto-wire 属性设置为 ...
- 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...
- Spring自动装配及自动注入
一. 自动装配 autowire 1.byType,按照类型自动装配,注意点,使用类型自动装配,在IOC容器中相同类型的bean只能有一个 2.byName,按照名称自动装配.bean的id和需要装配 ...
- (二)Spring自动装配
Spring自动装配 为了减少XML的配置数量.Spring提供了几种技巧来解决这一问题: 自动装配(autowiring): 有助于减少<property>元素和<constroc ...
最新文章
- 数据结构学习工具总结
- 初学Java-循环输入直到文件结束
- openssl / vs2019 编译 openssl 1.0.2u 过程说明
- java notify视频_一个很好的小例子来演示java中的wait()和notify()方法
- html5游戏面试题及答案,HTML5常见面试题及答案(二)
- HIDL第一个Hello World
- UIView你知道多少
- 计算机博弈点格棋规则,点格棋博弈中UCT算法的研究与实现
- 用html标记语言编写一个简单的网页代码,一个简单的网页设计代码
- win10安装MinGW
- JavaScript节点操作、删除节点
- 政务云迁移服务项目预算制定
- Unreal Engine 4 Radiant UI 入门教程(一)制作Radiant HUD
- 视觉感知特性 【1】人类视觉系统的信息处理机制的4个特性
- 一款免费的屏幕录制软件
- 关于android4.4沉浸模式的进入和退出时系统栏状态栏遮盖问题,【Android学习】关于Android4.4沉浸模式的进入和退出时系统栏状态栏遮盖问题...
- python 图片正方形化
- Linux_ubuntu
- Spring项目,项目启动执行方法且执行一次。
- flutter pod install报错:[BUG] Bus Error at 0x00000001001b8000 ruby 2.6.3p62 (2019-04-16 revision 67580
热门文章
- Python全栈开发(一)——环境搭建和入门
- SQL查询出距当前时间最近的一条或多条记录。
- Java简单实现DES加密解密算法
- ACM数学模板1 高斯消元 Gaussian Elimination
- 什么是mysql时间戳_mysql时间戳格式是什么类型
- 面试官发难,如何用 SQL 来查询 Elasticsearch 中的数据?
- 解决free():invalid pointer:0x00000000000000155455 ****的问题。
- 计算机故障排除ppt,在 PowerPoint 中对损坏的演示文稿进行故障排除 | Microsoft Docs...
- Activity的四种启动模式应用场景
- Activity的四种启动方式