Bean的自动装配(autowire)
自动装配
- 介绍
- 测试
- 环境搭配
- 创建三个实体类
- beans.xml
- 结果
- byname自动装配
- 更改上面的beans.xml
- 结果
- 再次修改beans.xml
- 修改beans.xml
- byType
- 测试
- 直接更改beans.xml
- 假设我们有两个dog
- 总结
介绍
- 自动装配是Spring满足bean依赖的一种方式
- spring上下文会自动寻找,并自动给bean装配
- 在spring中有三种自动装配的方式
1.在xml中显示的配置
2.在Java中显示的配置
3.隐式的自动装配bean(重要)
这里主要讲第三种:自动化的装配bean。
Spring的自动装配需要从两个角度来实现,或者说是两个操作:
组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean;
自动装配(autowiring):spring自动满足bean之间的依赖,也就是我们说的IoC/DI;
组件扫描和自动装配组合发挥巨大威力,使得显示的配置降低到最少。
测试
环境搭配
- 要求:一个人有两个宠物!并叫
创建三个实体类
- cat
public class Cat {public void shout(){System.out.println("miao~~");}
}
- dog
public class Dog {public void shout(){System.out.println("wang~~");}
}
- people
public class People {private Dog dog;private Cat cat;private String name;public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}public Cat getCat() {return cat;}public void setCat(Cat cat) {this.cat = cat;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "People{" +"dog=" + dog +", cat=" + cat +", 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.wxt.pojo.Cat"></bean><bean id="dog" class="com.wxt.pojo.Dog"></bean><bean id="people" class="com.wxt.pojo.People" ><property name="dog" ref="dog"></property><property name="cat" ref="cat"></property><property name="name" value="小吴" ></property></bean></beans>
结果
public class MtTest {@Testpublic void test1(){ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");People people = context.getBean("people", People.class);people.getCat().shout();people.getDog().shout();}
}
byname自动装配
更改上面的beans.xml
修改bean配置,增加一个属性 autowire=“byName”
<bean id="cat" class="com.wxt.pojo.Cat"></bean><bean id="dog" class="com.wxt.pojo.Dog"></bean><bean id="people" class="com.wxt.pojo.People" autowire="byName"><property name="name" value="小吴" ></property></bean>
结果
- 小结:我们可以发现,结果和上面的一样。所以我们可以增加一个属性 autowire="byName"进行运行并不影响结果。
再次修改beans.xml
我们将 cat 的bean id修改为 catXXX`
<bean id="cat111" class="com.wxt.pojo.Cat"></bean><bean id="dog" class="com.wxt.pojo.Dog"></bean><bean id="people" class="com.wxt.pojo.People" autowire="byName"><property name="name" value="小吴" ></property></bean>
运行:
小结:
1.执行时报空指针java.lang.NullPointerException。
2.实体类中为setCat 而id为catXXX不一样
3.可以得出,byname自动装配是根据bean的id去进行寻找的
byname:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanID
4.报错原因:因为按byName规则找不对应set方法,真正的setCat就没执行,对象就没有初始化,所以调用时就会报空指针错误。
修改beans.xml
增加一个一样的id
会发现idea直接报错:
- bynam的时候,需要保证所有的bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一样!
当一个bean节点带有 autowire byName的属性时。
1.将查找其类中所有的set方法名,例如setCat,获得将set去掉并且首字母小写的字符串,即cat。
2.去spring容器中寻找是否有此字符串名称id的对象。
- 如果有,就取出注入;如果没有,就报空指针异常。
byType
测试
直接更改beans.xml
autowire byType
<bean id="catXXX" class="com.wxt.pojo.Cat"></bean><bean id="dog" class="com.wxt.pojo.Dog"></bean><bean id="people" class="com.wxt.pojo.People" autowire="byType"><property name="name" value="小吴" ></property></bean>
运行:
成功!
小结:1.bytype不是根据自己对象set方法后面的值对应的beanID去匹配的
2.会自动在容器上下文中查找,和自己对象属性类型相同的bean
假设我们有两个dog
可以发现idea直接报错:得出bytype类型要全局唯一
总结
- bynam的时候,需要保证所有的bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一样!
- bytype的时候,需要保证所有的class唯一,并且这个bean需要和自动注入的属性类型一致
Bean的自动装配(autowire)相关推荐
- Bean的自动装配:autowire
Bean的自动装配 Bean的自动装配 Spring IOC容器可以自动装配Bean.需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式 public class Ca ...
- Spring精华问答 | Spring Bean的自动装配是怎么回事?
戳蓝字"CSDN云计算"关注我们哦! Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Sprin ...
- Spring之 Bean的自动装配
什么是Spring Bean的自动装配? 自动装配是Spring满足bean依赖一种方式 Spring会在上下文种自动寻找,并自动给bean装配属性 Spring种有三种装配方式 1.在xml种显示配 ...
- Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...
- ❤️Bean的自动装配(详细)
❤️Bean的自动装配(详细) 自动装配是Spring满足bean依赖的一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种自动装配的方式 在xml中显示的 ...
- [Spring实战系列](12)Bean的自动装配
Spring提供了4种各具特色的自动装配策略: 类型 说明 no 默认方式,Bean的引用必须通过XML文件中的</ref>元素或者ref属性手动设定. byName 把与Bean的属性具 ...
- 万字详解! Spring Bean的自动装配
点击上方 Java学习之道,选择 设为星标 每天18点,干货准时奉上! 何为自动装配 自动装配是 Spring 满足 bean 依赖的一种方式. 在使用 Spring 配置 bean 时,我们都要给配 ...
- Spring-04 Bean的自动装配
Bean的自动装配 1.自动装配是Spring满足Bean依赖的一种方式 2.Spring会在上下文中自动寻找,并自动给Bean装配属性 Spring中bean有三种装配机制,分别是: 1 在xml中 ...
- Spring自动装配-autowire
目录 1.自动装配-autowire 2.autowire的四种模式 3.使用自动装配 3.1 使用byName自动装配 3.2 使用byType自动装配 资源类和配置文件 1.自动装配-autowi ...
最新文章
- workbench应力应变曲线_说说真应力真应变
- 高性能Linux服务器运维实战,《高性能Linux服务器构建实战》笔记
- 投资提升亦令云安全引发高度关注
- IntelliJ IDEA2018配置SVN及常见问题解决
- LVS负载均衡群集部署之——NAT模式的介绍及搭建步骤
- 远程服务器部署spring boot 项目(centos7为例)
- 合并K个有序数组(链表)【字节跳动面试算法题】
- 开发对接微信卡包会员卡_产品||AI刷脸会员+电子会员卡
- #pragma pack (n) 惹的祸
- Web服务请求异步化介绍(概念篇)
- JDK安装以及配置环境变量详细步骤
- Java高级面试题!传智播客java基础入门pdf
- android 随音乐跳动,随心音乐,让心跟着跳动起来
- mysql山西区位码_输入码、区位码、国标码与机内码关系简介【转载】
- 酒店计算机管理系统维护合同,酒店计算机管理系统维护合同协议书范本(4页)-原创力文档...
- 3G手机J2ME开发环境搭建(eclipse3开发j2me环境搭建)
- 网页弹出窗口代码全攻略
- 全国最佳医院排名,为家人留一份
- MATLAB神经网络工具箱的使用——Neural Net Fitting app
- 日常上网必备趣味,实用的100个网站
热门文章
- 什么是免签支付那个好
- 盘点AWS、GCP及Microsoft Azure中的网络安全服务!
- CST场路联合仿真案例:外加偏置的电磁散射调控
- mysql ifnull 无效_关于MySql中使用IFNULL()函数失效的问题。
- 图像语义分割模型 FCN
- -Shell 命令行工具 Cmder Babun Zsh MD
- 房地产税构成或已确定 收入将全部划归地方
- android 自定义裁剪 陌陌,Android之View篇6————仿陌陌卡片左右滑动选择布局
- [cdq分治习题练习]
- android 获取电量百分比 简书,Android 获取当前电量