首页 > 其他分享 >引用类型属性自动注入-byName,byType,多个配置文件

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

时间:2022-11-02 20:47:14浏览次数:46  
标签:byType 配置文件 数据类型 byName bean 引用 类型 属性

引用类型属性自动注入

对于引用类型属性的注入,也可不在配置文件中显示的注入。可以通过为标签 设置 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 代码中只需要使用总配置文件对容器进行初始化即可。

结构如下:

测试结果如下:

标签:byType,配置文件,数据类型,byName,bean,引用,类型,属性
From: https://www.cnblogs.com/atao-BigData/p/16852356.html

相关文章

  • Spring Boot读取Yml配置文件的3种方法
    1 基础用法,使用@Value注解直接注入配置信息@Value("${spring.datasource.username}")privateStringname;2 使用注解@Autowired注入Environment类@......
  • yml/yaml--文件格式/配置文件--用法/写法
    原文网址:yml/yaml--文件格式/配置文件--用法/写法_IT利刃出鞘的博客-CSDN博客简介说明     YAML 是一种简洁的非标记语言,文件名后缀为.yml,java中经常用它描述......
  • [I.MX6UL] Linux 内核移植(三) 网络驱动修改 配置文件另存为
    使能8线EMMC驱动Linux内核驱动里面EMMC默认是4线模式的,4线模式肯定没有8线模式的速度快,所以将EMMC的驱动修改为8线模式。修改方法很简单,直接修改设备树即可......
  • Spring-7-配置文件
    文章目录​​1.为什么要用配置文件​​​​2.怎么用包含配置文件​​1.为什么要用配置文件有多个applicationContext.xml可以分为服务层,dao和其他方便生成的对象便于管理2.......
  • ASP.NET Core教程-Configuration(配置)- 配置文件
    更新记录转载请注明出处:2022年10月31日发布。2022年10月28日从笔记迁移到博客。ASP.NETCore应用配置说明当我们需要将程序发布到不同环境中时,需要让应用支持配......
  • Logstash同时运行多个配置文件
    创建存放logstash配置文件存放目录mkdirlogstash-7.17.0/conf.d修改pipelines.yml进行配置vimlogstash-7.17.0/config/pipelines.yml-pipeline.id:all.logqu......
  • 解决CentOS添加新网卡后找不到网卡配置文件
    使用VMwareWorkstation虚拟机安装好CentOS7虚拟机后,添加网卡后CentOS7无网卡配置文件的问题,添加第二块网卡以后,进入CentOS7系统后,看不到网卡配置文件。进入CentOS7系统......
  • gin-配置文件管理
    1.使用库viper使用示例packagemainimport( "fmt" "github.com/spf13/viper")typeServerConfigstruct{ ServiceNamestring`mapstructure:"name"` Port......
  • Java读取properties配置文件工具包
    一、properties文件简介java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties......
  • c# asp.net core 6 配置文件与ServiceCollection的使用
    一、引包1.Microsoft.Extensions.Configuration2.Microsoft.Extensions.Configuration.Json3.Microsoft.Extensions.Configuration.Binder4.Microsoft.Extensions.Depe......