You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringData调用UserManager时userRepository为null的问题求助

你遇到的两个null问题根源都是Spring容器的依赖注入规则没遵守:

  • 手动new UtenteServiceImpl时,Spring没法给这个实例注入userRepository,所以userRepository为null;
  • 去掉手动实例化后,UserManager本身不是Spring管理的Bean,Spring没法给它注入userService,所以userService变成null。

解决步骤

  1. 把UserManager纳入Spring容器管理:给UserManager类加@Component或@Service注解,让Spring负责它的实例化和依赖注入。
  2. 移除UserManager里的手动实例化代码:只保留@Autowired声明UtenteService,让Spring自动注入实现类。
  3. 修正UtenteService接口的注解:接口不需要加@Service,仅在实现类UtenteServiceImpl上保留该注解即可,避免Spring识别混乱。
  4. 修复Repository返回值不匹配问题:UtenteRepository的findByEmail返回List<Utente>,但UtenteService的search方法返回Utente,直接强转会报错,需调整逻辑取有效元素。

修改后的代码

UserManager

package milligroup.models;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.provisioning.UserDetailsManager;
import org.springframework.stereotype.Component;

import milligroup.services.UtenteService;

@Component
public class UserManager implements UserDetailsManager{
    @Autowired
    UtenteService userService;

    public void createUser(UserDetails userBean, String email) {
        userService.saveUser(new Utente(email, userBean.getUsername(), userBean.getPassword()));
    }

    @Override
    public void deleteUser(String email) {
        Utente u = userService.search(email);
        if(u != null) {
            userService.delete(u);
        }
    }

    @Override
    public void changePassword(String oldPassword, String newPassword) {
        
    }

    @Override
    public boolean userExists(String email) {
        Utente u = userService.search(email);
        return u != null;
    }

    @Override
    public void createUser(UserDetails user) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void updateUser(UserDetails user) {
        //chiama service
        
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // TODO Auto-generated method stub
        return null;
    }
    
}

UtenteService

package milligroup.services;

import milligroup.models.Utente;

public interface UtenteService{
    Utente saveUser(Utente u);

    Utente search(String email);

    void delete(Utente u);
}

UtenteServiceImpl

package milligroup.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import milligroup.models.Utente;
import milligroup.models.UtenteRepository;

@Service
public class UtenteServiceImpl implements UtenteService{
    @Autowired
    private UtenteRepository userRepository;
    
    @Override
    public Utente saveUser(Utente u) {
        return userRepository.save(u);
    }

    @Override
    public Utente search(String email) {
        List<Utente> userList = userRepository.findByEmail(email.toLowerCase());
        return userList.isEmpty() ? null : userList.get(0);
    }

    @Override
    public void delete(Utente u) {
        userRepository.delete(u);       
    }

}

UtenteRepository(无需修改)

package milligroup.models;

import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface UtenteRepository extends CrudRepository<Utente, Long>{
    @Query("select u from Utente u where lower(u.email) = :searchTerm")   
    List<Utente> findByEmail(@Param("searchTerm") String searchTerm);
}

修改完成后,Spring会自动管理所有Bean的依赖注入,userService和userRepository都不会再出现null,同时也修复了返回值不匹配的潜在问题。

内容的提问来源于stack exchange,提问作者user28801942

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:37:10