【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">
如果不想一个个配置,可以使用通配符(*)来指定
-->
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?