java - SpringBoot中通过构造函数表示的不满足的依赖关系
问题描述
大家好,我的 springboot 版本是“2.2.4.RELEASE”。
我想在构造函数中自动装配 2 参数。但它不起作用。
Mabye 我认为'passwordEncoder' 有问题......
这里是'UserService.java' 代码。
import kr.co.loosie.foody.domain.User;
import kr.co.loosie.foody.domain.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.Optional;
@Service
@Transactional
public class UserService {
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
@Autowired
public UserService(UserRepository userRepository,
PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
public User registerUser(String email, String name, String password) {
Optional<User> existed = userRepository.findByEmail(email);
if (existed.isPresent()) {
throw new EmailExistedException(email);
}
String encodedPassword = passwordEncoder.encode(password);
User user = User.builder()
.email(email)
.name(name)
.password(encodedPassword)
.level(1L)
.build();
return userRepository.save(user);
}
public User authenticate(String email, String password) {
User user = userRepository.findByEmail(email)
.orElseThrow(() -> new EmailNotExistedException(email));
if (!passwordEncoder.matches(password, user.getPassword())) {
throw new PasswordWrongException();
}
return user;
}
}
错误部分在这里。
@Autowired
public UserService(UserRepository userRepository,
PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = 密码编码器;
}
当我只使用 UserReposiotory 进行自动接线
但我输入PasswordEncoder 密码编码器行时,它起作用了,它不起作用。请给我一些帮助!
这是警告信息
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with
name 'userService' defined in file [D:\CCC\intellij_ex\foody\foody-customer-
api\build\classes\java\main\kr\co\loosie\foody\application\UserService.class]: Unsatisfied dependency
expressed through constructor parameter 1; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
'org.springframework.security.crypto.password.PasswordEncoder' available: expected at least 1 bean
which qualifies as autowire candidate. Dependency annotations: {}
请给我一些帮助!
解决方案
错误消息显示没有 bean for org.springframework.security.crypto.password.PasswordEncoder
,这意味着您没有在任何地方定义它。
你需要类似的东西:
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
在您的配置中(如果通过 Java 进行配置)
推荐阅读
- php - 在 codeigniter - google 登录回调 url 中包含特殊字符 (.) 并引发 403 错误。怎么修?
- azure - 物联网中心和设备配置服务
- java - PayTm 网关集成 + CheckSum 的问题
- r - 如何在 R 中绘制三维图
- solr - 如何判断 Solr 的索引是否已更改,包括对文档的任何修改、添加或删除?
- php - 在将包含设置到文件中时访问包含中的属性
- plot - 朱莉娅情节;如何单独绘制耦合方程图?
- flutter - 在 Flutter 中检测手势速度
- android - Delphi Android 使用 Android API - Handpoint
- ios - iOS UITextView sizeToFit 使 iPad 中内容文本的高度加倍