用Spring的XML版的构造函数注入完成这个过程
源码获取github
1.项目结构
2.jar包
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
</dependencies>
3.代替private UserDao userDao = new userDaoImpl();
UserServiceImpl.java
package com.hs.service.impl;
import com.hs.dao.UserDao;
import com.hs.service.UserService;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl() {
}
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void add() {
System.out.println("UserService层的实现类--->ADD");
userDao.add();
}
}
beans.xml
<!--实例化-->
<bean id="userDaoImpl" class="com.hs.dao.impl.UserDaoImpl">
</bean>
<!--通过构造函数实例化-->
<bean id="userServiceImpl" class="com.hs.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDaoImpl"/>
</bean>
这两段代码相当于,完成了private UserDao userDao = new userDaoImpl();
4.代替private UserService userService = new userServiceImpl();
UserController.java
package com.hs.web;
import com.hs.service.UserService;
public class UserController {
private UserService userService;
public UserController() {
}
public UserController(UserService userService) {
this.userService = userService;
}
public void add() {
System.out.println("UserController层--->ADD");
userService.add();
}
}
beans.xml
<bean id="userServiceImpl" class="com.hs.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDaoImpl"/>
</bean>
<bean id="userController" class="com.hs.web.UserController">
<constructor-arg name="userService">
<ref bean="userServiceImpl"/>
</constructor-arg>
</bean>
这两段代码相当于,完成了private UserService userService = new userServiceImpl();
5.代替UserController userController = new UserController();
测试
package com.hs.test;
import com.hs.web.UserController;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MethodTest {
@Test
public void test01() {
// 1.读取配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
//获取xml版本里的UserController userController = new UserController();
UserController userController = applicationContext.getBean("userController", UserController.class);
userController.add();
}
}
控制台输出:
UserController层—>ADD
UserService层的实现类—>ADD
UserDao层的实现类—>ADD