Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC-静态上下文中的自动连线存储库NullPointerException_Java_Spring_Spring Mvc_Autowired - Fatal编程技术网

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

My
springservlet.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,这对我有帮助: