Bean的自动装配
再说自动装配之前,我们先聊一聊什么是手动装配。
手动装配就是我们在先前讲的那些,要自己给定属性,然后赋值
Spring IOC容器可以自动装配Bean,需要做的仅仅实在<bean>的autowire属性里指定自动装配的模式
byType(根据类型自动装配):若IOC容器中有多个与目标Bean类型一致的Bean。在这种情况下,Spring将无法判断哪个Bean最合适该属性,所以不能执行自动配置。
byName(根据名称自动装配):必须将目标Bean的名称和属性名设置的完全相同。
constructor(通过构造器自动装配):当Bean中存在多个构造器时,此种自动装配方式会很复杂,不推荐使用
重新写一个新的包,创建几个新的JavaBean,
Address:
private String city;
private String street;
Car:
private String brand;
private double price;
Person:
private String name;
private Address address;
private Car car;
创建新的配置文件:beans-autowire.xml
byname
我们先按照先前的步骤溜一遍:
- <bean id="address" class="com.figsprite.bean.autowire.Address"
- p:city="上海" p:street="陆家嘴"></bean>
- <bean id="car" class="com.figsprite.bean.autowire.Car"
- p:brand="奥迪" p:price="233"></bean>
- <bean id="person" class="com.figsprite.bean.autowire.Person"
- p:name="小雨" p:car-ref="car" p:address-ref="address"></bean>
然后更改最后Person类的配置,让其中的Car和Address改成自动装配。
先使用byName,我们此时Car和Address两个对象<bean>的id刚好和我们在Person.java里的setter风格的属性名保持一致,因此是没有问题的,
<bean id="person" class="com.figsprite.bean.autowire.Person"
p:name="小雨" autowire="byName"></bean>
注意这里是setter风格的属性名一致,而不是与类名一致,我们可以试着改掉Person.java里的属性名
private String name;
private Address address;
private Car mycar;
同时也将setter方法改掉:
发现car为空,如果仅仅只改属性名(字段名),不改setter风格的属性名,是没什么异样的。
所以byName是根据bean的名字和当前bean的setter风格的属性名进行自动装配,若有匹配成功的,则进行自动装配,若匹配不成功,则不装配
byType
这个是根据类型配的,我们先把之前改过的Person.java还原成最初的模样:
我们改一下Car的容器id
<bean id="helloCar" class="com.figsprite.bean.autowire.Car"
p:brand="奥迪" p:price="233"></bean>
如果我们还是使用byName,结果可想而知
Person{name='小雨', address=Address{city='上海', street='陆家嘴'}, car=null}
接下来我们换成byType:
Person{name='小雨', address=Address{city='上海', street='陆家嘴'}, car=Car{brand='奥迪', price=233.0}}
意料之中,不过之前有说过byType的致命弱点,不可以出现两个相同类型的容器,这里,我们再加一个Car容器,优秀的IDEA已经自己报错了,我们还是强制运行一下:
自动装配的缺点
- 属性要么都是用自动装配的形式,要么不用,不能部分使用,部分不使用
- 要么byName,要么byType,不能兼用
所以其实我们很少用这个功能,弊大于利。
Bean的自动装配的更多相关文章
- Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...
- spring实战二之Bean的自动装配(非注解方式)
Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bea ...
- Spring bean的自动装配属性
bean的自动装配属性能简化xml文件配置. bean 的自动装配属性分为四种: 1.byName 2.byTyoe 3.constructor 4. autodetect byName: 它查找配置 ...
- Spring(三):bean的自动装配
Bean的自动装配 自动装配是Spring满足bean依赖的一种方式. Spring会在上下文中自动寻找,并自动给bean装配属性 Spring中三种装配方式 在xml中显式的配置. 在java中显式 ...
- Spring-04 Bean的自动装配
Spring-04 Bean的自动装配 Bean的自动装配 1.自动装配说明 自动装配是使用spring满足bean依赖的一种方法. spring会在应用上下文中为某个bean寻找其依赖的bean. ...
- Spring学习03(Bean的自动装配)
6.Bean的自动装配 6.1 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean的三种装配机 ...
- bean的自动装配,使用注解开发,使用java的方式配置Spring
bean的自动装配 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种装配的方式 在xml中显示的配置 在java中 ...
- spring实战四之Bean的自动装配(注解方式)
使用注解装配: 从spring2.5开始,Spring启用了使用注解自动装配Bean的属性,使用注解方式自动装配与在XML中使用 autowire 属性自动装配并没有太大区别,但是使用注解方式允许更细 ...
- spring bean autowire自动装配
转自:http://blog.csdn.net/xiao_jun_0820/article/details/7233139 autowire="byName"会自动装配属性与Bea ...
随机推荐
- JavaScript 基础结构
注释 代码注释可以使用//或者/* */ // 这是一个单行注释 /* * 这是 * 一个 * 多行 * 注释 */ 变量 变量用于存储数据,在同一作用域内变量不得重名,定义语法: ...
- Hibernate框架笔记01_环境搭建_API_CRUD
目录 1. Hibernate框架的概述 1.1 什么是框架 1.2 经典三层架构 1.3 Hibernate框架 2 Hibernate入门 2.1 下载Hibernate的开发包 2.2 创建项目 ...
- ELK 日志采集 实战教程
概要 带着问题去看教程: 不是用logstash来监听我们的日志,我们可以使用logback配置来使用TCP appender通过TCP协议将日志发送到远程Logstash实例. 我们可以使用Logs ...
- jsp基础语言-jsp声明
jsp声明的语法格式:<%! 声明代码 %> jsp声明的意义:用来定义在程序中使用到的变量.方法等.最后要以“:”结尾. jsp声明举例: <%! int a=100,b=200; ...
- cesium 之核心类 Viewer 简介篇
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 简 ...
- C#检查字符串是否是合法的HTTP URL地址的代码
在研发过程,把开发过程较好的一些内容片段记录起来,下面的内容是关于C#检查字符串是否是合法的HTTP URL地址的内容,应该是对各位有较大用处. protected string HTTPChecke ...
- 基于 PHP 的数据爬取(QueryList)
基于PHP的数据爬取 官方网站站点 简单. 灵活.强大的PHP采集工具,让采集更简单一点. 简介: QueryList使用jQuery选择器来做采集,让你告别复杂的正则表达式:QueryList具有j ...
- 一、Windows Server 2016 AD服务器搭建
简介: AD是Active Directory的简写,中文称活动目录.活动目录(Active Directory)主要提供以下功能: 1)服务器及客户端计算机管理 2)用户服务 3)资源管理 4)桌面 ...
- LeetCode算法题-Reverse Words in a String III(Java实现)
这是悦乐书的第259次更新,第272篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第126题(顺位题号是557).给定一个字符串,您需要反转句子中每个单词中的字符顺序,同 ...
- PowerShell执行脚本时“系统上禁止运行脚本”问题解决
PowerShell执行脚本策略错误 错误信息:PowerShell运行脚本错误--"系统上禁止运行脚本" 原因:默认执行策略为Restricted 解决:执行Set-Execut ...