自动装配

  • 介绍
  • 测试
    • 环境搭配
    • 创建三个实体类
    • 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的对象。

  1. 如果有,就取出注入;如果没有,就报空指针异常。

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)相关推荐

  1. Bean的自动装配:autowire

    Bean的自动装配 Bean的自动装配 Spring IOC容器可以自动装配Bean.需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式 public class Ca ...

  2. Spring精华问答 | Spring Bean的自动装配是怎么回事?

    戳蓝字"CSDN云计算"关注我们哦! Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Sprin ...

  3. Spring之 Bean的自动装配

    什么是Spring Bean的自动装配? 自动装配是Spring满足bean依赖一种方式 Spring会在上下文种自动寻找,并自动给bean装配属性 Spring种有三种装配方式 1.在xml种显示配 ...

  4. Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配

    一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...

  5. ❤️Bean的自动装配(详细)

    ❤️Bean的自动装配(详细) 自动装配是Spring满足bean依赖的一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种自动装配的方式 在xml中显示的 ...

  6. [Spring实战系列](12)Bean的自动装配

    Spring提供了4种各具特色的自动装配策略: 类型 说明 no 默认方式,Bean的引用必须通过XML文件中的</ref>元素或者ref属性手动设定. byName 把与Bean的属性具 ...

  7. 万字详解! Spring Bean的自动装配

    点击上方 Java学习之道,选择 设为星标 每天18点,干货准时奉上! 何为自动装配 自动装配是 Spring 满足 bean 依赖的一种方式. 在使用 Spring 配置 bean 时,我们都要给配 ...

  8. Spring-04 Bean的自动装配

    Bean的自动装配 1.自动装配是Spring满足Bean依赖的一种方式 2.Spring会在上下文中自动寻找,并自动给Bean装配属性 Spring中bean有三种装配机制,分别是: 1 在xml中 ...

  9. Spring自动装配-autowire

    目录 1.自动装配-autowire 2.autowire的四种模式 3.使用自动装配 3.1 使用byName自动装配 3.2 使用byType自动装配 资源类和配置文件 1.自动装配-autowi ...

最新文章

  1. workbench应力应变曲线_说说真应力真应变
  2. 高性能Linux服务器运维实战,《高性能Linux服务器构建实战》笔记
  3. 投资提升亦令云安全引发高度关注
  4. IntelliJ IDEA2018配置SVN及常见问题解决
  5. LVS负载均衡群集部署之——NAT模式的介绍及搭建步骤
  6. 远程服务器部署spring boot 项目(centos7为例)
  7. 合并K个有序数组(链表)【字节跳动面试算法题】
  8. 开发对接微信卡包会员卡_产品||AI刷脸会员+电子会员卡
  9. #pragma pack (n) 惹的祸
  10. Web服务请求异步化介绍(概念篇)
  11. JDK安装以及配置环境变量详细步骤
  12. Java高级面试题!传智播客java基础入门pdf
  13. android 随音乐跳动,随心音乐,让心跟着跳动起来
  14. mysql山西区位码_输入码、区位码、国标码与机内码关系简介【转载】
  15. 酒店计算机管理系统维护合同,酒店计算机管理系统维护合同协议书范本(4页)-原创力文档...
  16. 3G手机J2ME开发环境搭建(eclipse3开发j2me环境搭建)
  17. 网页弹出窗口代码全攻略
  18. 全国最佳医院排名,为家人留一份
  19. MATLAB神经网络工具箱的使用——Neural Net Fitting app
  20. 日常上网必备趣味,实用的100个网站

热门文章

  1. 什么是免签支付那个好
  2. 盘点AWS、GCP及Microsoft Azure中的网络安全服务!
  3. CST场路联合仿真案例:外加偏置的电磁散射调控
  4. mysql ifnull 无效_关于MySql中使用IFNULL()函数失效的问题。
  5. 图像语义分割模型 FCN
  6. -Shell 命令行工具 Cmder Babun Zsh MD
  7. 房地产税构成或已确定 收入将全部划归地方
  8. android 自定义裁剪 陌陌,Android之View篇6————仿陌陌卡片左右滑动选择布局
  9. [cdq分治习题练习]
  10. android 获取电量百分比 简书,Android 获取当前电量