복붙노트

[SPRING] 정적 MVC에서 자동로드 저장소 NullPointerException

SPRING

정적 MVC에서 자동로드 저장소 NullPointerException

내 모델에는 UserRepository라는 저장소가 있습니다. 또한 기본적으로 사용자를 저장소에 추가하고 컨트롤러가 액세스하는 UserFacade가 있습니다. Repo는 Facade에서 @Autowired입니다. 새 사용자를 추가하려면 저장소에 대해 nullPointerException이 발생합니다.

내 spring-servlet.xml에는

repositories는 UserRepository.java가 들어있는 폴더입니다. CrudRepository를 확장합니다.

@Repository
public interface UserRepository extends CrudRepository<User, Long> {
    User findByUsername(String username);
}

Facade.java는 저장소를 포함하는 객체입니다.

public class UserFacade {
    @Autowired
    private static UserRepository userRepo;

    private static Logger logger = LoggerFactory.getLogger(UserFacade.class);

    public UserFacade(){} //Thought it might work if I add a constructor and call it?

    public static User findByUsername(String username) {
        logger.debug(username+userRepo);  // prints SomeStringnull
        return userRepo.findByUsername(username); //NullPointerException
    }
}

그리고 내 컨트롤러에서 나는 다음과 같은 방법을 가지고있다 :

@RequestMapping(value = CONTEXT)
public String test(){
    User user = UserFacade.findByUsername("get"); 
    //obviously user will be null if there is no such user
    return "success";
}

Android Studio를 사용하면서 가져 오기에 문제가 없어야합니다. 내가 놓친 게 무엇입니까?

참고 : 관련 질문에 대한 많은 훌륭한 답변이 있지만 (예 :이 질문과 같이), 각기 다른 상황이 있으며 도움이되지 않습니다.

해결법

  1. ==============================

    1.Spring은 정적 필드를 autowire하지 않는다. 이것이 userRepo 필드가 null 인 이유입니다. 한 가지 방법은 UserFacade를 Bean 자체로 만드는 것입니다. 그러면 userRepo를 비 정적 필드로 만들 수 있습니다. 나는이 방법을 선호 할 것이다. UserFacade는 실제로 저장소 클래스와 상호 작용하기 때문에 유틸리티 클래스가 아니어야합니다. 빈을 만드는 것이 훨씬 더 합리적 일 것입니다.

    Spring은 정적 필드를 autowire하지 않는다. 이것이 userRepo 필드가 null 인 이유입니다. 한 가지 방법은 UserFacade를 Bean 자체로 만드는 것입니다. 그러면 userRepo를 비 정적 필드로 만들 수 있습니다. 나는이 방법을 선호 할 것이다. UserFacade는 실제로 저장소 클래스와 상호 작용하기 때문에 유틸리티 클래스가 아니어야합니다. 빈을 만드는 것이 훨씬 더 합리적 일 것입니다.

    또 다른 옵션은 setter를 제공하고 @Autowired를 사용하는 것입니다.

    @Autowired
    public void setUserRepo(UserRepository userRepo) {
        UserFacade.userRepo = userRepo;
    }
    

    또는 심지어 매개 변수화 된 생성자에서이를 사용하면 효과가 있습니다.

  2. from https://stackoverflow.com/questions/22764164/spring-mvc-autowired-repository-nullpointerexception-in-static-context by cc-by-sa and MIT license