spring使用byName类型的自动注入时,其中<bean>中的id="userService"中的这个userService到底和谁对应?spring是怎么找到userService,然后将UserServiceImpl注入的。
<bean id="userService" class="com.atguigu.spring6.iocxml.auto.service.UserServiceImpl"
autowire="byName">
</bean>
先看我的目录结构
其中UserController的代码如下:
package com.atguigu.spring6.iocxml.auto.controller;
import com.atguigu.spring6.iocxml.auto.service.UserService;
public class UserController {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public void addUser(){
System.out.println("controller方法执行了。");
//调用service中的方法
userService.addUserService();
}
}
配置文件bean-auto.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.atguigu.spring6.iocxml.auto.dao.UserDaoImpl" >
</bean>
<bean id="userController" class="com.atguigu.spring6.iocxml.auto.controller.UserController"
autowire="byName">
</bean>
<bean id="userService" class="com.atguigu.spring6.iocxml.auto.service.UserServiceImpl"
autowire="byName">
</bean>
</beans>
在下面的语句中,我们采用了byName的注入方式,<bean>标签的id为id="userService",那么在UserController中注入UserServiceImpl时,就要使用名字(userService)去注入,但是userService会和UserController中的哪一个变量关联起来呢?我没想到的是,竟然是public void setUserService(UserService userService)这个方法。没错,setUserService去掉“set”,把U变成u,然后就和userService对应上了。spring就靠着<bean>中的id和java类中的set方法的名字产生关联。
<bean id="userService" class="com.atguigu.spring6.iocxml.auto.service.UserServiceImpl"
autowire="byName">
</bean>