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

相关推荐
zfj3219 小时前
从源码层面解析一下ThreadLocal的工作原理
java·开发语言·threadlocal
墨笔之风9 小时前
java后端根据双数据源进行不同的接口查询
java·开发语言·mysql·postgres
程序猿阿伟9 小时前
《Python复杂结构静态分析秘籍:递归类型注解的深度实践指南》
java·数据结构·算法
黑白极客9 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
爬山算法9 小时前
Hibernate(32)什么是Hibernate的Criteria查询?
java·python·hibernate
hkNaruto9 小时前
【AI】AI学习笔记:A2A(智能体协作)入门指南:从概念到实践
人工智能·笔记·学习
yj_sharing10 小时前
动手学深度学习softmax回归的笔记
笔记·深度学习·回归
暖暖木头10 小时前
playwright学习笔记
笔记·学习
码农水水10 小时前
中国邮政Java面试:热点Key的探测和本地缓存方案
java·开发语言·windows·缓存·面试·职场和发展·kafka
a程序小傲10 小时前
小红书Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·后端·python·面试·职场和发展