Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Spring mvc @在一个SpringMVC控制器中,当其他控制器工作时,自动连线字段为空_Spring Mvc - Fatal编程技术网

Spring mvc @在一个SpringMVC控制器中,当其他控制器工作时,自动连线字段为空

Spring mvc @在一个SpringMVC控制器中,当其他控制器工作时,自动连线字段为空,spring-mvc,Spring Mvc,我有一个非常简单和经典的页面,其中有一个Spring MVC控制器和一个jsp(jsp在这里不相关): 调试时,我看到userRepository确实为null userRepository应该由Spring注入,在我的所有其他控制器中,情况都很好:Sptring正确地注入了相同的bean(userRepository) 为什么在这个由Spring实例化和调用的特定控制器(与其他所有控制器在同一个包中)中,userRepository为null? 我完全不明白。欢迎提出任何建议 谢谢! 埃米尔。

我有一个非常简单和经典的页面,其中有一个Spring MVC控制器和一个jsp(jsp在这里不相关):

调试时,我看到userRepository确实为null

userRepository应该由Spring注入,在我的所有其他控制器中,情况都很好:Sptring正确地注入了相同的bean(userRepository)

为什么在这个由Spring实例化和调用的特定控制器(与其他所有控制器在同一个包中)中,userRepository为null? 我完全不明白。欢迎提出任何建议

谢谢! 埃米尔。

一些想法:

  • 打开Spring日志记录到信息级别,您应该会在应用程序启动期间看到一些日志记录语句,这些语句告诉您哪些控制器映射到了哪些URL。查看是否列出了此控制器。如果不是,spring就不会将其识别为控制器

  • 您是否在未被xml中的
    标记扫描的命名空间中声明了此控制器

  • 正如@coder提到的,确保bean没有在XML上下文中声明


当我继续这样做时,我找到了答案:我在controller中创建了一个@PostConstruct方法,以查看userRepository是否在开始时被注入。实际上,当@PostConstruct方法运行时,userRepository不是null。在调试我的方法时,我发现对象的id (在eclipse上的视图变量中)是307。此外,在调试displayList方法时,“this”显示了一个代理。因此,看起来@postconstruct method test()在bean中运行,而@RequestMapping displayList方法在代理中运行。在代理中,userRepository将为null

那么为什么@RequestMapping displayList()在代理中运行呢?
原因是我的方法是私有的。如果我将displayList()转换为一个公共方法,一切都正常。

您是否在spring cpnfig中将playlistController声明为xml bean?此外,如果您可以共享spring配置,请说明如何配置上下文?
@Controller
public class PlayListListController  extends BaseController<PlayList> {

    @Autowired UserRepository userRepository;

    @RequestMapping("/playlist/{userName}")
    private ModelAndView displayList(@PathVariable("userName") String userName) {
        User user = userRepository.getUserByUserName(userName);
        ....
    }

}
    User user = userRepository.getUserByUserName(userName);