[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.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; }
또는 심지어 매개 변수화 된 생성자에서이를 사용하면 효과가 있습니다.
from https://stackoverflow.com/questions/22764164/spring-mvc-autowired-repository-nullpointerexception-in-static-context by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 배치 단계 범위 작업 방법 (0) | 2019.07.13 |
---|---|
[SPRING] web.xml을 사용하지 않고 추적 모드를 쿠키로 설정하여 추가 된 세션 ID를 제거합니다. (0) | 2019.07.13 |
[SPRING] Spring bean은 동시성을 어떻게 처리하나요? (0) | 2019.07.13 |
[SPRING] Spring의 Json 응답 시간대 문제 (0) | 2019.07.13 |
[SPRING] MockRestServiceServer로 RestTemplate을 조롱하는 법? (0) | 2019.07.13 |