(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方法是必须要提供的。提供构造方法是不行的,大家可以测试一下。这里就不再赘述。

相关推荐
white_ant11 分钟前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
疯狂打码的少年1 小时前
【软件工程】软件开发模型:增量模型与迭代模型
笔记·软件工程
Generalzy1 小时前
从本地 Demo 到生产级检索:Milvus 学习笔记(3)
笔记·学习·milvus
广州灵眸科技有限公司2 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
库克克2 小时前
【C++ 】内联函数
java·开发语言·c++
zh_xuan2 小时前
java 虚拟线程
java·开发语言·虚拟线程
jason成都2 小时前
RTKLIB Java 移植踩坑复盘:卡尔曼滤波核心逻辑修复与滑坡场景实测验证
java·开发语言
恼书:-(空寄3 小时前
Spring AOP底层是怎么织入的?——ProxyFactory、JDK Proxy vs CGLIB与编译期织入
spring·动态代理
老毛肚3 小时前
juc线程通信
java·开发语言·jvm
长不胖的路人甲3 小时前
SpringCloud 服务雪崩、熔断、降级
后端·spring·spring cloud