Java Spring的三种注入方式详解流程
在Java Spring中,有三种常用的依赖注入方式:构造函数注入、Setter方法注入以及字段注入。下面将分别给出这三种方式的详细讲解流程。
构造函数注入
步骤一:定义一个接口
首先,我们需要定义一个接口。这个接口将会被一个实现类所实现。在这个接口中,我们可以定义一些方法,让实现类去具体实现这些方法。
public interface UserService {
void addUser(User user);
}
步骤二:实现接口
定义完接口后,我们需要有一个实现类来具体实现这个接口中的方法。这个实现类将会被注入到我们的测试类中。
@Service
public class UserServiceImpl implements UserService {
@Override
public void addUser(User user) {
System.out.println("add user: " + user.getName());
}
}
步骤三:在测试类中进行注入
在测试类中,我们需要进行依赖注入。我们可以用构造函数注入来实现。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserServiceTest {
private UserService userService;
@Autowired
public UserServiceTest(UserService userService) {
this.userService = userService;
}
@Test
public void testAddUser() {
User user = new User("Alice");
userService.addUser(user);
}
}
在上面的测试类中,我们通过在构造函数中加入注解@Autowired来进行依赖注入。变量userService将会被注入一个UserService对象。
Setter方法注入
步骤一:定义接口和实现类
首先,我们需要定义接口和实现类,这跟构造函数注入是一样的。
步骤二:定义Setter方法
在实现类中,我们需要定义Setter方法,并使用注解@Autowired来标记这个方法。
@Service
public class UserServiceImpl implements UserService {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void addUser(User user) {
userDao.saveUser(user);
System.out.println("add user: " + user.getName());
}
}
步骤三:在测试类中进行注入
测试类中跟构造函数注入的方式不同,我们需要定义一个无参构造函数,然后使用Setter方法进行注入。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserServiceTest {
private UserService userService;
public UserServiceTest() {}
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@Test
public void testAddUser() {
User user = new User("Alice");
userService.addUser(user);
}
}
字段注入
步骤一:定义接口和实现类
同样是定义接口和实现类。
步骤二:在实现类中定义注解
在实现类中,我们需要标注这个实现类,使用注解@Component。
@Component
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void addUser(User user) {
userDao.saveUser(user);
System.out.println("add user: " + user.getName());
}
}
步骤三:在测试类中进行注入
在测试类中,我们只需要定义一个字段,然后使用注解@Autowired将这个字段注入即可。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void testAddUser() {
User user = new User("Alice");
userService.addUser(user);
}
}
至此,我们已经完成了Java Spring的三种注入方式的详细讲解流程。
示例
以下是两个完整示例:
构造函数注入
public interface UserService {
void addUser(User user);
}
@Service
public class UserServiceImpl implements UserService {
private final UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void addUser(User user) {
userDao.saveUser(user);
System.out.println("add user: " + user.getName());
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserServiceTest {
private final UserService userService;
@Autowired
public UserServiceTest(UserService userService) {
this.userService = userService;
}
@Test
public void testAddUser() {
User user = new User("Alice");
userService.addUser(user);
}
}
Setter方法注入
public interface UserService {
void addUser(User user);
}
@Service
public class UserServiceImpl implements UserService {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void addUser(User user) {
userDao.saveUser(user);
System.out.println("add user: " + user.getName());
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserServiceTest {
private UserService userService;
public UserServiceTest() {}
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@Test
public void testAddUser() {
User user = new User("Alice");
userService.addUser(user);
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java spring的三种注入方式详解流程 - Python技术站