Java Spring MVC-静态上下文中的自动连线存储库NullPointerException
在我的模型中,我有一个名为Java Spring MVC-静态上下文中的自动连线存储库NullPointerException,java,spring,spring-mvc,autowired,Java,Spring,Spring Mvc,Autowired,在我的模型中,我有一个名为UserRepository的存储库。此外,我还有一个UserFacade,它基本上将用户添加到存储库中,并由控制器访问。回购协议在立面中自动连接。当我想添加一个新用户时,我会得到存储库的nullPointerException Myspringservlet.xml包含所需的 而repositories是包含UserRepository.java的文件夹。它扩展了积垢沉积理论: @Repository public interface UserRepository
UserRepository
的存储库。此外,我还有一个UserFacade
,它基本上将用户添加到存储库中,并由控制器访问。回购协议在立面中自动连接。当我想添加一个新用户时,我会得到存储库的nullPointerException
Myspringservlet.xml
包含所需的
而repositories是包含UserRepository.java
的文件夹。它扩展了积垢沉积理论:
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
User findByUsername(String username);
}
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。我错过了什么
注意:对于相关的问题(如),有很多很好的答案,但每一个都有自己不同的上下文,对我没有帮助。Spring不会自动连接
静态
字段。这就是userRepo
字段为null
的原因。一种方法是使UserFacade
本身成为bean,然后可以使userRepo
成为非静态字段。我更喜欢这种方式UserFacade
实际上不应该是一个实用程序类,因为它正在与存储库bean交互。把它变成豆子会更有意义
另一个选项是提供设置器,并在其上使用@Autowired
:
@Autowired
public void setUserRepo(UserRepository userRepo) {
UserFacade.userRepo = userRepo;
}
或者在参数化构造函数上使用它也可以。可能重复@SotiriosDelimanolis,这也是我的想法,直到我读到它(这就是我在问题中链接它的原因)。对。这不是一个精确的副本,但它确实给了你解决方案。@ SotiriosDelimanolis确实给了我很多有价值的信息,但是我需要一个根本不同的方法(没有静态方法),所以我不认为它是解决方案。正确的,最后的答案是如何做到这一点。谢谢,我不知道。有没有办法让它保持静态(作为自动连线的替代品?@Patrick我想我给了你两个<代码>设置器和
构造函数
。但你真的应该把它改成bean你说得对。。我很困惑,我认为我不能从非静态方法设置静态变量(反之亦然)。我怎么称呼塞特?你还是建议用豆子,为什么?我认为它在这种情况下没有意义,它更像是一个助手类。@Patrick它不是一个助手类。它更像一个服务类,与存储库类交互。你不需要打电话给塞特。春天会处理好的。谢谢。我对豆子不太熟悉,认为它更像一个实体。但是纠正了我。不知道setters上的@Autowired,这对我有帮助: