## 6.1、場景模擬 ### 6.1.1、創建UserDao介面及實現類  ``` package or ...
6.1、場景模擬
6.1.1、創建UserDao介面及實現類
package org.rain.spring.dao;
/**
* @author liaojy
* @date 2023/8/5 - 11:05
*/
public interface UserDao {
void saveUser();
}
package org.rain.spring.dao.impl;
import org.rain.spring.dao.UserDao;
/**
* @author liaojy
* @date 2023/8/5 - 11:08
*/
public class UserDaoImpl implements UserDao {
public void saveUser() {
System.out.println("保存成功");
}
}
6.1.2、創建UserService介面及實現類
package org.rain.spring.service;
/**
* @author liaojy
* @date 2023/8/5 - 11:10
*/
public interface UserService {
void saveUser();
}
package org.rain.spring.service.impl;
import org.rain.spring.dao.UserDao;
import org.rain.spring.service.UserService;
/**
* @author liaojy
* @date 2023/8/5 - 11:23
*/
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void saveUser() {
userDao.saveUser();
}
}
6.1.3、創建UserController
package org.rain.spring.controller;
import org.rain.spring.service.UserService;
/**
* @author liaojy
* @date 2023/8/5 - 11:32
*/
public class UserController {
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public void saveUser(){
userService.saveUser();
}
}
6.1.4、配置bean
<?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="userDao" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="org.rain.spring.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userController" class="org.rain.spring.controller.UserController">
<property name="userService" ref="userService"></property>
</bean>
</beans>
6.1.5、測試
@Test
public void testAutoWireByXML(){
ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-autowire.xml");
UserController userController = ioc.getBean(UserController.class);
userController.saveUser();
}
6.2、兩種自動裝配方式
6.2.1、方式一:byType(常用)
6.2.1.1、配置bean
註意:
若在IOC中,沒有任何一個相容類型的bean能夠為屬性賦值,則該屬性不裝配,即值為預設值null
若在IOC中,有多個相容類型的bean能夠為屬性賦值,則拋出異常NoUniqueBeanDefinitionException
<bean id="userDao" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>
<!--
autowire屬性:指定自動裝配的策略,為bean的類類型(或介面類型)的屬性自動賦值
byType:根據要賦值的屬性的類型,匹配ioc容器中的相容類型的bean,為屬性賦值
-->
<bean id="userService" class="org.rain.spring.service.impl.UserServiceImpl" autowire="byType"></bean>
<bean id="userController" class="org.rain.spring.controller.UserController" autowire="byType"></bean>
6.2.1.2、測試
6.2.2、方式二:byName(後備)
6.2.2.1、配置bean
當在IOC中,有多個相容類型的bean能夠為屬性賦值時;可以使用byName的方式,匹配id和屬性名相同的bean為屬性賦值
<bean id="userDao" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>
<bean id="userDaotwo" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>
<!--
autowire屬性:指定自動裝配的策略,為bean的類類型(或介面類型)的屬性自動賦值
byName:根據要賦值的屬性的名稱,匹配ioc容器中的對應id的bean,為屬性賦值
-->
<bean id="userService" class="org.rain.spring.service.impl.UserServiceImpl" autowire="byName"></bean>