当前位置: 首页 > news >正文

byName自动装配和byType自动装配

依赖注入DI(其实就是对象的创建和对象的属性赋值交给容器)_Pr Young的博客-CSDN博客 

这里的创建对象,给对象的属性赋值的方式是手动的

我们现在要做的不用我们手动,由容器自动赋值

先创建两个类,一个Cat类,一个Dog类

public class Cat
{
    public  void  shout()
    {
        System.out.println("miao~");
    }
}
public class Dog
{
    public  void  shout()
    {
        System.out.println("wang~");
    }
}


然后创建一个People类,上面两个类的对象都是这个类的属性,表示一个人养了一只猫和一只狗

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;
    }
}

web.xml文件里面:

//new一个Cat类的对象cat1    
<bean id="cat1"  class="com.kuang.pojo.Cat"/>
 
//new一个Dog类的对象dog1
<bean id="dog1"  class="com.kuang.pojo.Dog"/>
 
 
//new一个People类的对象people1,并且给他的两个属性cat赋值cat1对象,dog赋值dog1对象
<bean id="people1"  class="com.kuang.pojo.People">
     <property name="name"  value="欧阳水鸣"/>
     <property name="cat"   ref="cat1"/>
     <property name="dog"  ref="dog1"/>
</bean>


byName自动装配:

People类的对象people1里面有两个属性是别的类的对象(Dog,Cat类)
容器会遍历容器里面每一个对象的id,如果这个对象的id是Dog类的首字母小写dog,Cat类的首字母cat,就把这个对象赋值给people1的两个属性

但是你如果id叫dog111,或者cat2,这样是识别不出来的,无法赋值成功,id只能是类的名字首字母小写,这是严格规定的

//new一个Cat类的对象cat1    
<bean id="cat"  class="com.kuang.pojo.Cat"/>
 
//new一个Dog类的对象dog1
<bean id="dog"  class="com.kuang.pojo.Dog"/>
 
 
//new一个People类的对象people1,并且给他的两个属性cat赋值cat1对象,dog赋值dog1对象
<bean id="people1"  class="com.kuang.pojo.People"  autowire="byName">
     <property name="name"  value="欧阳水鸣"/>
</bean>


byType自动装配

People类的对象people1里面有两个属性是别的类的对象(Dog,Cat类)
容器会遍历容器里面每一个对象,查询这个对象所属的类,如果这个对象所属的类是Dog类,或者是Cat类,就把这个对象赋值给people1的两个属性

所以不管容器内bean的id叫什么,只要它是Dog类的对象和Cat类的对象,就能赋值成功

所以这要求在容器内,一个类只能有一个对象,不能一个类new出多个对象,要不然不知道赋哪个值

//new一个Cat类的对象cat1    
<bean id="cat333"  class="com.kuang.pojo.Cat"/>
 
//new一个Dog类的对象dog1
<bean id="dog123"  class="com.kuang.pojo.Dog"/>
 
 
//new一个People类的对象people1,并且给他的两个属性cat赋值cat1对象,dog赋值dog1对象
<bean id="people1"  class="com.kuang.pojo.People"  autowire="byType">
     <property name="name"  value="欧阳水鸣"/>
</bean>

相关文章:

  • 【黑马Java笔记汇总】JavaSE+JavaWeb+SSM+Springboot笔记汇总
  • DRF 用户认证
  • 系统架构演变历史及集群、分布式、微服务、SOA的概念区别
  • 四、RocketMq本地集群搭建
  • 金仓数据库 KingbaseES 插件参考手册 xml2
  • FITC-PEG-SH/Fluorescent-PEG-SH 多种分子量可选/荧光素聚乙二醇巯基 FITC-PEG-SH
  • 常用hooks用法总结
  • 赛默飞世尔Thermo Fisher仪器电路板维修故障概述
  • 对于生物素-PEG32-NHS 酯,Biotin-PEG32-NHS ester物理性质大家了解多少了?
  • 关于神经网络的正确说法,神经网络通俗的解释是
  • python带你采集桌游、剧本杀游戏店数据信息~
  • sd卡数据丢失的原因有哪些?常见的sd卡数据丢失原因及恢复方法
  • 深度神经网络的训练过程
  • 【04】MapReduce
  • 《MySQL实战45讲》——学习笔记02 “深入浅出索引、最左前缀原则、索引下推优化“
  • CSS盒模型深入
  • CSS实用技巧干货
  • Docker: 容器互访的三种方式
  • ES10 特性的完整指南
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Rancher-k8s加速安装文档
  • Spring Boot快速入门(一):Hello Spring Boot
  • Sublime text 3 3103 注册码
  • Terraform入门 - 3. 变更基础设施
  • 半理解系列--Promise的进化史
  • 翻译:Hystrix - How To Use
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 简单数学运算程序(不定期更新)
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 协程
  • 延迟脚本的方式
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (day6) 319. 灯泡开关
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (二)正点原子I.MX6ULL u-boot移植
  • (转)shell调试方法
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • *Django中的Ajax 纯js的书写样式1
  • .net core 6 redis操作类
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net 获取url的方法
  • .Net下的签名与混淆
  • @Not - Empty-Null-Blank
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [C#]科学计数法(scientific notation)显示为正常数字
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [ES-5.6.12] x-pack ssl
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [FZSZOJ 1223] 上海红茶馆
  • [HAOI2016]食物链
  • [hdu4622 Reincarnation]后缀数组
  • [java刷算法]牛客—剑指offer链表有环的入口、反转链表、合并排序链表