首页 > 解决方案 > 直接调用@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

https://github.com/arocketman/SpringBlog/blob/master/src/main/java/com/arocketman/github/service/UserService.java

标签: javaspringspring-boot

解决方案


BCryptPasswordEncoder不是 bean,你不能自动装配它。

利用:

new BCryptPasswordEncoder().encode(user.getPassword());

或者,您可以在您的配置(@Configuration)中创建这样的 bean:

@Bean
public PasswordEncoder passwordEncoder(){
   return new BCryptPasswordEncoder();
}

然后,将其自动连接到您的服务中:

@Autowired
private PasswordEncoder passwordEncoder;

推荐阅读