(9)基于xml的自动装配

所有的基于xml的自动装配底层都是调用set方法,它自动帮我们做了一些事,实际上是通过一定的映射规则来找到对应的变量的set方法。**自动装配只作用于那些「对应 setter 方法的参数类型是容器中已注册的 Bean 类型」的属性。**要想为简单类型赋值,请使用 <property> 显式设置

根据名称自动装配

Spring的配置文件这样配置:

xml 复制代码
<?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">

    <bean id="userService" class="com.powernode.spring6.service.UserService" autowire="byName"/>
    
    <bean id="aaa" class="com.powernode.spring6.dao.UserDao"/>

</beans>

这个配置起到关键作用:

  • UserService Bean中需要添加autowire="byName",表示通过名称进行装配。
  • UserService类中有一个UserDao属性,而UserDao属性的名字是aaa,对应的set方法是setAaa() ,正好和UserDao Bean的id是一样的。这就是根据名称自动装配。
    这说明,如果根据名称装配(byName),底层会调用set方法进行注入。
    例如:setAge() 对应的名字是age,setPassword()对应的名字是password,setEmail()对应的名字是email。

根据类型自动装配

xml 复制代码
<?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">

    <!--byType表示根据类型自动装配-->
    <bean id="accountService" class="com.powernode.spring6.service.AccountService" autowire="byType"/>

    <bean class="com.powernode.spring6.dao.AccountDao"/>

</beans>

注意:

  • 这种基于类型的自动装配需要在类中提供空参构造和set方法
  • 当byType进行自动装配的时候,配置文件中某种类型的Bean必须是唯一的,不能出现多个。

!NOTE 总结

无论是byName还是byType,在装配的时候都是基于set方法的。所以set方法是必须要提供的。提供构造方法是不行的,大家可以测试一下。这里就不再赘述。

相关推荐
liuyicenysabel5 分钟前
多服务上线日记三:
运维·服务器·笔记·学习
CHENGQUAN_kenan21 分钟前
佛山亚马逊卖家出口退税合规指南|9610免税、一般贸易退税、无票采购、申报误区全覆盖
大数据·经验分享·笔记·百度
吠品1 小时前
Wine 在 Linux 上运行 Windows 软件完整指南
java·linux·服务器
一只小小的芙厨2 小时前
基础数论总结
笔记·学习·算法
亚历克斯神3 小时前
智能搜索系统的升级复盘——从 Elasticsearch 到混合检索的检索质量提升
java·spring·微服务
金銀銅鐵3 小时前
[Java] 一个方法最多可以有多少个入参?
java·jvm
哭哭啼4 小时前
JAVA服务问题诊断
java·开发语言·jvm
Sayuanni%34 小时前
SpringBoot 从注解到源码:核心知识点总结
java·spring boot·后端
@Mike@4 小时前
09-数据库学习笔记(数据库索引与过滤器)
数据库·笔记
坚定信念,勇往无前4 小时前
Maven 私有仓库-nexus
java