【Spring 框架(自学)】Day03(基于XML的DI)--2022/3/21

基于XML的DI

引用类型属性自动注入

为了避免一个个引入的繁琐操作,spring中提供了针对引用类型的属性自动注入的功能:autowire
它的存在大大减轻了代码的冗余。


按名称注入(byName):

此方法通过bean标签中的id去匹配其实体类对应的名称

<bean id="myStudent" class="com.spring.Pojo3.Student" autowire="byName">
    <property name="name" value="王五"></property>
    <property name="age" value="99"></property>
    <!--
    <constructor-arg name="school" ref="mySchool"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    -->
</bean>

<bean id="school" class="com.spring.Pojo3.School">
       <property name="name" value="引用类型中属性的自动注入"></property>
       <property name="address" value="武汉"></property>
    </bean>

当Spring执行的时候会先创建对象,走到bean标签的时候,会扫到autowire进而查询里面的参数byName,然后去根据bean标签的id来查找对应的属性,最终实现自动注入


按类型注入(byType):

此方法通过bean标签中的class去匹配对应的实体类,也就是同源关系

同源关系:

  • Java类型中引用类型的数据类型和bean标的class值是一样的
  • Java类型中引用类型的数据类型和bean标的class值是父子关系的
  • Java类型中引用类型的数据类型和bean标的class值是接口和实现类的关系
<!--1)Java类型中引用类型的数据类型和bean标的class值是一样的-->
 <bean id="mySchool" class="com.spring.Pojo3.School">
       <property name="name" value="引用类型中属性的自动注入"></property>
       <property name="address" value="武汉"></property>
</bean>


<!--2)Java类型中引用类型的数据类型和bean标的class值是父子关系的-->
    <bean id="exSchool" class="com.spring.Pojo3.extendSchool">
        <property name="name" value="byTpe自动注入"></property>
        <property name="address" value="武汉"></property>
    </bean>


<bean id="myStudent" class="com.spring.Pojo3.Student" autowire="byType">
    <property name="name" value="王五"></property>
    <property name="age" value="99"></property>
    <!--
    <constructor-arg name="school" ref="mySchool"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    <constructor-arg name="xx" ref="yy"></constructor-arg>
    -->
</bean>

与按名称查询相反,它是匹配class类

需要注意的是:

  • 在byType中只能声明一个符合条件的bean,多余一个一上的则视为错误

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

做开发的技巧:

当项目过于庞大时,需要对配置文件进行分类管理,可以将其按照模块事务service功能来进行分类

例如:

<!--Spring-student.xml-->
<bean id="myStudent" class="com.spring.Pojo4.Student" autowire="byType">
    <property name="name" value="王五"></property>
    <property name="age" value="99"></property>
</bean>

<!--Spring-school.xml-->
<bean id="school" class="com.spring.Pojo4.School">
    <property name="name" value="byTpe自动注入"></property>
    <property name="address" value="武汉"></property>
</bean>

<!--total.xml-->
 <import resource="classpath:com/spring/spring-*.xml"></import>
<!--
	当存在多个配置时可以分开去写,最后引用total.xml去读取student管理和school管理的路径
	语法:
		<import resource="classpath:xx/yy/配置文件.xml">
	  	如果不想一个个配置,可以使用通配符(*)来指定
-->
posted @   VVS,冷漠的心  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

囚鸟该如何超越今生?

点击右上角即可分享
微信分享提示