Spring框架的两种依赖注入方式,实现一个简单的登录验证。按照实际企业开发三层模式完成该功能(有Dao层/Service层/Controller层)
时间: 2024-09-07 21:03:02 浏览: 35
Spring框架提供了两种常见的依赖注入方式:
1. **构造函数注入** (Constructor Injection): 这种方式通过构造函数将依赖项传递给实例化后的对象。例如,在登录服务中,你可以创建一个LoginService类,它的构造函数接受一个UserRepository接口的实例:
```java
@Service
public class LoginService {
private UserRepository userRepository;
public LoginService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// 简单登录验证方法
public boolean validateLogin(String username, String password) {
User user = userRepository.findByUsername(username);
return user.getPassword().equals(password); // 假设password字段未加密
}
}
```
2. **setter注入** (Setter Injection): 通过`setXXX`方法来注入依赖。Spring会在运行时调用这些方法并传入相应的对象。同样,登录服务类可以这样设计:
```java
@Service
public class LoginService {
private UserRepository userRepository;
// 使用setter注入
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
// 登录验证
public boolean validateLogin(String username, String password) {
User user = userRepository.findByUsername(username);
return user.getPassword().equals(password);
}
}
```
对于一个简单的登录验证,你可能会有一个 Dao 层负责数据库交互(如 `UserRepository`),Service 层处理业务逻辑(如 `LoginService`),以及 Controller 层接收用户请求并调用服务:
- **Dao层 (UserServiceImpl.java 或 UserRepository.java)**:
```java
@Repository
public interface UserRepository {
User findByUsername(String username);
}
```
- **Service层 (LoginServiceImpl.java)**:
```java
@Service
public class LoginServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
// 使用上面提到的构造函数或setter方法
@Override
public boolean validateLogin(String username, String password) {
// 实现登录验证逻辑
}
}
```
- **Controller层 (UserController.java)**:
```java
@RestController
public class UserController {
@Autowired
private LoginService loginService;
@PostMapping("/login")
public ResponseEntity<?> authenticate(@RequestParam("username") String username, @RequestParam("password") String password) {
if (loginService.validateLogin(username, password)) {
// 成功登录响应
} else {
// 错误响应
}
}
}
```
阅读全文