引用类型属性自动注入

​ 对于引用类型属性的注入,也可不在配置文件中显示的注入。可以通过为标签 设置 autowire 属性值,为引用类型属性进行隐式自动注入(默认是不自动注入引用类型属 性)。根据自动注入判断标准的不同,可以分为两种: byName:根据名称自动注入 byType: 根据类型自动注入

1. byName 方式自动注入

当配置文件中被调用者 bean 的 id 值与代码中调用者 bean 类的属性名相同时,可使用 byName 方式,让容器自动将被调用者 bean 注入给调用者 bean。容器是通过调用者的 bean 类的属性名与配置文件的被调用者 bean 的 id 进行比较而实现自动注入的。

配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--引用类型的自动注入: spring框架根据某些规则可以给引用类型赋值。·不用你在给引用类型赋值了使用的规则常用的是byName, byType.1.byName(按名称注入) : java类中引用类型的属性名和spring容器中(配置文件)<bean>的id名称一样,且数据类型是一致的,这样的容器中的bean,spring能够赋值给引用类型。语法:<bean id="xx" class="yyy" autowire="byName">简单类型属性赋值</bean>2.byType(按类型注入) : java类中引用类型的数据类型和spring容器中(配置文件)<bean>的class属性是同源关系的,这样的bean能够赋值给引用类型同源就是一类的意思:1.java类中引用类型的数据类型和bean的class的值是一样的。2.java类中引用类型的数据类型和bean的class的值父子类关系的。3.java类中引用类型的数据类型和bean的class的值接口和实现类关系的语法:<bean id="xx" class="yyy" autowire="byType">简单类型属性赋值</bean>--><!--byName--><bean id="myStudent" class="com.bjpowernode.ba04.Student"  autowire="byName"><property name="name" value="李四" /><property name="age" value="26" /><!--引用类型--><!--<property name="school" ref="mySchool" />--></bean><!--声明School对象--><bean id="school" class="com.bjpowernode.ba04.School"><property name="name" value="清华大学"/><property name="address" value="北京的海淀区" /></bean><!--声明School对象--><bean id="teacher" class="com.bjpowernode.ba04.Teacher"><property name="id" value="001"/><property name="name" value="海.明威" /></bean></beans>

2.byType方式自动注入

使用 byType 方式自动注入,要求:配置文件中被调用者 bean 的 class 属性指定的类, 要与代码中调用者 bean 类的某引用类型属性类型同源。即要么相同,要么有 is-a 关系(子 类,或是实现类)。但这样的同源的被调用 bean 只能有一个。多于一个,容器就不知该匹配 哪一个了。

和上述一样,就是配置文件有区别:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--引用类型的自动注入: spring框架根据某些规则可以给引用类型赋值。·不用你在给引用类型赋值了使用的规则常用的是byName, byType.1.byName(按名称注入) : java类中引用类型的属性名和spring容器中(配置文件)<bean>的id名称一样,且数据类型是一致的,这样的容器中的bean,spring能够赋值给引用类型。语法:<bean id="xx" class="yyy" autowire="byName">简单类型属性赋值</bean>2.byType(按类型注入) : java类中引用类型的数据类型和spring容器中(配置文件)<bean>的class属性是同源关系的,这样的bean能够赋值给引用类型同源就是一类的意思:1.java类中引用类型的数据类型和bean的class的值是一样的。2.java类中引用类型的数据类型和bean的class的值父子类关系的。3.java类中引用类型的数据类型和bean的class的值接口和实现类关系的语法:<bean id="xx" class="yyy" autowire="byType">简单类型属性赋值</bean>注意:在byType中, 在xml配置文件中声明bean只能有一个符合条件的,多余一个是错误的--><!--byType--><bean id="myStudent" class="com.bjpowernode.ba05.Student"  autowire="byType"><property name="name" value="张飒" /><property name="age" value="26" /><!--引用类型--><!--<property name="school" ref="mySchool" />--></bean><!--声明School对象-->
<!--    <bean id="mySchool" class="com.bjpowernode.ba05.School">-->
<!--        <property name="name" value="人民大学"/>-->
<!--        <property name="address" value="北京的海淀区" />-->
<!--    </bean>--><!--声明School的子类--><bean id="primarySchool" class="com.bjpowernode.ba05.PrimarySchool"><property name="name" value="北京小学" /><property name="address" value="北京的大兴区" /></bean>
</beans>

3.为应用指定多个 Spring 配置文件

在实际应用里,随着应用规模的增加,系统中 Bean 数量也大量增加,导致配置文件变 得非常庞大、臃肿。为了避免这种情况的产生,提高配置文件的可读性与可维护性,可以将 Spring 配置文件分解成多个配置文件。 包含关系的配置文件: 多个配置文件中有一个总文件,总配置文件将各其它子文件通过引入。在 Java 代码中只需要使用总配置文件对容器进行初始化即可。

结构如下:

测试结果如下:

引用类型属性自动注入-byName,byType,多个配置文件相关推荐

  1. spring10: 引用类型的自动注入

    package com.atChina.Test5;public class Student {private String name;private int age;private School s ...

  2. 百行代码打造一个DI容器(支持瞬时生命周期、单利生命周期、构造函数自动注入、属性自动注入、字段自动注入)...

    DI注入在.Net平台是非常流行的, 很多项目都用到了,很多开发人员或多或少也用到DI容器了,感觉DI容器很神奇很厉害.本文将通过百行代码展示DI容器的内部核心代码(包括组件的瞬时生命周期.单利生命周 ...

  3. Spring中自动注入的两种方式

    目录 1. 前言 2. set注入和构造注入. 3. 什么情况下要使用自动注入? 4. 自动注入之byName 5. 自动注入之byType注入 1. 前言 Spring的核心技术IOC(Intoro ...

  4. Spring Aop面向切面编程自动注入

    1.面向切面编程 在程序原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面的过程叫做面向切面编程 2.常用概念 原有功能:切点,pointcut 前置通知:在切点之前执行的功能,befor ...

  5. Spring——16 自动注入

    自动注入 概念 在 Spring 配置文件中对象名和 ref="id" 的id 名相同,使用自动注入,可以不配置property/ 标签 两种配置办法 ①在bean 标签中通过 a ...

  6. Spring学习第5篇:自动注入(autowire)详解

    大家家好,我是一名网络怪咖,北漂五年.相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也 ...

  7. Spring自动注入原理

    我的博客 spring的属性注入属于spring bean的生命周期一部分,bean的生命周期首先记住两个概念: spring bean:最终存在spring容器当中的对象 对象:实例化出来的对象,但 ...

  8. Spring自动注入(引用类型)

    spring可以根据某些规则给引用类型完成赋值,只对引用类型有效.有两种方式实现自动注入,下面简单的介绍以下 1-ByName 按名称自动注入:Java类中引用类型的属性名称和spring容器中bea ...

  9. 自动注入、加载 properties 文件、scope 属性、单例设计模式

    一.自动注入 在 Spring 配置文件中对象名和 ref="id"id 名相同使用自动注入,可以不配置<property/> 两种配置办法 2.1 在<bean ...

最新文章

  1. 数组公式基本功修炼之数组扩充
  2. 这38个小技巧告诉你如何快速学习MySQL数据库
  3. Git 这样回退代码,才足够优雅
  4. go使用PostgreSQL数据库
  5. 异常 Failed to instantiate [java.util.List]: Specified class is an interface
  6. Java的clone方法
  7. zabbix监控之概念和安装
  8. 《Python编程快速上手——让繁琐工作自动化》——2.8 导入模块
  9. CDR 网状填充高级图形
  10. 无法正确检查该计算机的授权,一个问题阻止windows正确检查此机器的许可证,错误代码ox80070002...
  11. 磁盘转换|如何将mbr转换成gpt?
  12. 三毛3--亲爱的婆婆大人
  13. 携程2017 校招编程题
  14. Mysql中索引相关问题
  15. 南京标志设计-logo设计(品牌形象核心部分)
  16. Java操作Redis客户端
  17. Flutter第一部分(UI)第二篇:在Flutter中构建布局
  18. 关于DNS的配套工具
  19. 天天刷 B 站,了解他们的评论系统是如何设计的吗?
  20. C++:map.insert插入重复键(已存在键)将忽略,而非值覆盖

热门文章

  1. [转载]计算机硕士求职总结
  2. 简洁介绍信号量sem_t的起因、原理与使用
  3. 2022中国数据库产业排行榜
  4. UNREAL4 PROPERTY SYSTEM
  5. 一、ECMAScript 6/7/8简介
  6. docker-registry登录认证
  7. 怎么申请专利?专利多久下证?专利申请费用多少?
  8. 计算机与音乐整合的教学设计,《音乐与诗歌的交融》教学设计
  9. 七个合法学习黑客技术的网站,让你从萌新成为大佬
  10. 城中村水费一吨5元,电费一度1.5元,很贵,而我只能选择城中村