java - 直接调用@Bean注解的方法——函数调用@Service类中的一个bean
问题描述
我只是在函数“save”中一遍又一遍地得到一个错误,它说:“直接调用用@Bean注释的方法。改用依赖注入。” 调用“passwordEncoder()”时
在这一行
user.setPassword( passwordEncoder() .encode(user.getPassword()));
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
public void save(User user){
user.setPassword(passwordEncoder().encode(user.getPassword()));
userRepository.save(user);
}
public User getUser(String username){
return userRepository.findByUsername(username);
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
}
我在弹簧逻辑中遗漏了什么,它不起作用?
顺便说一句 - 紧随其后:https: //www.youtube.com/watch?v= IOgCMtYMr2Q&t=1s&ab_channel=RocketMan
解决方案
BCryptPasswordEncoder
不是 bean,你不能自动装配它。
利用:
new BCryptPasswordEncoder().encode(user.getPassword());
或者,您可以在您的配置(@Configuration
)中创建这样的 bean:
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
然后,将其自动连接到您的服务中:
@Autowired
private PasswordEncoder passwordEncoder;
推荐阅读
- python - 如何处理预测任务中的多个类别
- nuget - 未列出/不推荐使用的包的 NuGet API
- php - 如何检索重复数据
- mysql - 如果存在,如何删除表 ___; 作品?
- sockets - 我通过套接字发送的最大缓冲区大小是否有指导方针?
- moodle - JSXGraph in Moodle: How to use MathJax for text
- java - Spring Data JPA 日期查询不适用于日期和日期大于
- javascript - 在使用 Fetch API React 渲染时使用 JSX 显示 API 信息
- python-3.x - Matplotlib savefig() 慢...只是事情的方式或想法加速?
- arrays - 对字符串的迭代,“表达式必须具有指向对象类型的指针”错误