1. 添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.8</version>
</dependency>
2. UserDao接口
public interface UserDao {
void listUser();
}
3. UserDao 实现类,分 3 个 java 文件编写
// MySQL 实现
public class UserDaoMysqlImpl implements UserDao {
public void listUser() {
System.out.println("MySQL 实现获取用户列表");
}
}
// Oracle 实现
public class UserDaoOracleImpl implements UserDao {
public void listUser() {
System.out.println("Oracle 实现获取用户列表");
}
}
// Sybase 实现
public class UserDaoSybaseImpl implements UserDao {
public void listUser() {
System.out.println("Sybase 实现获取用户列表");
}
}
4. UserController,需要注入UserDao的地方
public class UserController {
private UserDao userDao;
/**
* 无参构造函数
*/
public UserController(){
}
/**
* 有参构造函数
* @param userDao
*/
public UserController(UserDao userDao){
this.userDao = userDao;
}
/**
* set 方法
* @param userDao
*/
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
/**
* 查询所有用户
*/
public void listUser(){
userDao.listUser();
}
}
5. 配置文件 applicationContext.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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDaoMysqlImpl" class="com.example.demo.dao.UserDaoMysqlImpl"/> <!-- new !-->
<bean id="userDaoOracleImpl" class="com.example.demo.dao.UserDaoOracleImpl"/> <!-- new !-->
<bean id="userDaoSybaseImpl" class="com.example.demo.dao.UserDaoSybaseImpl"/> <!-- new !-->
<!-- 通过无参构造函数和setter函数注入 !-->
<!-- ref引用Spring中创建好的对象,value引用基本数据类型 !-->
<bean id="userController1" class="com.example.demo.web.UserController"> <!-- UserController userController1 = new UserController(); !-->
<property name="userDao" ref="userDaoOracleImpl"/> <!-- userController.setUserDao(userDaoOracleImpl); !-->
</bean>
<!-- 通过无参构造函数和setter函数注入,使用p命名空间,p = property !-->
<bean id="userController12" class="com.example.demo.web.UserController" p:userDao-ref="userDaoOracleImpl"/>
<!-- 通过有参构造函数注入 !-->
<bean id="userController2" class="com.example.demo.web.UserController"> <!-- UserController userController2 = !-->
<!-- 参数名 !-->
<constructor-arg name="userDao" ref="userDaoMysqlImpl"/> <!-- new UserController(userDaoMysqlImpl); !-->
<!-- 参数位置 !-->
<!-- <constructor-arg index="0" ref="userDaoMysqlImpl"/> !-->
<!-- 参数类型 !-->
<!-- <constructor-arg type="com.example.demo.dao.UserDao" ref="userDaoMysqlImpl"/> !-->
</bean>
<!-- 通过有参构造函数注入,使用c命名空间,c = constructor !-->
<bean id="userController22" class="com.example.demo.web.UserController" c:userDao-ref="userDaoMysqlImpl"/>
</beans>
6. Test
import com.example.demo.web.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserController userController1 = context.getBean("userController1", UserController.class);
userController1.listUser();
UserController userController12 = context.getBean("userController12", UserController.class);
userController12.listUser();
UserController userController2 = context.getBean("userController2", UserController.class);
userController2.listUser();
UserController userController22 = context.getBean("userController22", UserController.class);
userController22.listUser();
}
}
7. 运行结果
Oracle 实现获取用户列表
Oracle 实现获取用户列表
MySQL 实现获取用户列表
MySQL 实现获取用户列表
Process finished with exit code 0
8.总结
对象的创建和依赖的注入都通过Spring来进行管理,注入方式有两种:
① 通过无参构造函数和setter函数注入(可使用 p 命名空间);
② 通过有参构造函数注入:参数位置、参数类型、参数名字(可使用 c 命名空间)。