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

相关推荐
qq_589568103 小时前
springbootweb案例,出现访问 http://localhost:8080/list 一直处于浏览器运转阶段
java·网络协议·http·list·springboot
九成宫3 小时前
Outlook使用
windows·笔记·outlook·办公
JAVA面经实录9174 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
晚风_END4 小时前
Linux|操作系统|最新版openzfs编译记录
linux·运维·服务器·数据库·spring·中间件·个人开发
AC赳赳老秦4 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
FYKJ_20105 小时前
springboot校园兼职平台--附源码02041
java·javascript·spring boot·python·eclipse·django·php
书源丶5 小时前
三十六、File 类与 IO 流基础——文件操作的「第一步」
java
呱呱巨基6 小时前
Linux 基础IO
linux·c++·笔记·学习
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题】【Java基础篇】第30题:JDK动态代理和CGLIB动态代理有什么区别
java·开发语言·后端·面试·代理模式