Angularjs Spring控制器有时具有null@Autowired对象,并且似乎不受Spring上下文的管理

Angularjs Spring控制器有时具有null@Autowired对象,并且似乎不受Spring上下文的管理,angularjs,spring,controller,null,autowired,Angularjs,Spring,Controller,Null,Autowired,我有一个这样定义的Spring控制器,它有两个请求映射,一个使用localDAO,另一个使用dependencyDAO。LocalDAO类存在于我的项目中,DependencyDAO类通过maven dependency导入: @RestController @PreAuthorize("hasRole('USER')") public class MyController @Autowired private localDAO LocalDAO; // dao classes

我有一个这样定义的Spring控制器,它有两个请求映射,一个使用localDAO,另一个使用dependencyDAO。LocalDAO类存在于我的项目中,DependencyDAO类通过maven dependency导入:

@RestController
@PreAuthorize("hasRole('USER')")
public class MyController

    @Autowired
    private localDAO LocalDAO; // dao classes exist in my project

    @Autowired
    private DependencyDAO dependencyDAO; // dao classes imported via maven dependency

...

    @RequestMapping("/getUsingLocalDAO")
    private String getUsingLocalDAO(
            @JsonProperty("param") String param) {
        localDAO.get(param) ... // <== this never null
    }

    @RequestMapping("/getUsingDependencyDAO")
    private String getUsingDependencyDAO(
            @JsonProperty("param") String param) {
        dependencyDAO.get(param) ... // <== this always null
    }

...
我正在从Angular编写一个$http.post,如下所示:

    $http.post('getUsingLocalDAO', $.param($scope.parameters), {
        headers : {
            "content-type" : "application/x-www-form-urlencoded"
        }
    }).success(function(data) {
        ...
    }).error(function(data) {
        ...

    $http.post('getUsingDependencyDAO', $.param($scope.parameters), {
        headers : {
            "content-type" : "application/x-www-form-urlencoded"
        }
    }).success(function(data) {
        ...
    }).error(function(data) {
        ...
除了执行的方法外,这两个帖子都是相同的

当逐步通过调试器时,我可以看到正在创建的所有DAOBean

当我调用getUsingLocalDAO时,一切都按预期工作。 但是,当我调用getUsingDependencyDAO时,每个@Autowired对象都为null

我相信我得到了MyController的不同实例。一个由Spring管理,一个不由Spring管理;或者至少没有正确实例化

我接二连三地打这些电话。他们的顺序不重要

我尝试通过@Autowired注入servlet上下文以手动获取bean,但在getUsingDependencyDAO中它也总是空的

我尝试使用应用程序上下文感知,尽管我看到在调试器中设置了上下文设置器,但在getUsingDependencyDAO中上下文始终为null

如果我将这两个调用封装在第三个请求映射中,就像这样,一切都很好(没有空对象)

我使用的是SpringBoot4.1.5。我的项目是100%注释驱动的,没有.xml配置。这两个请求映射之间的唯一区别是,一个使用依赖项中的bean,另一个不使用

我已经寻找了3天这个问题的答案,但没有找到任何接近我所经历的

谁能解释一下我做错了什么?任何帮助都将不胜感激


谢谢。

好的,我解决了这个问题。我上面的示例代码并不完全准确。给我空值的请求方法被定义为私有方法,而工作的方法被定义为其应该的公共方法。最初,私有方法不是请求方法,修改器在更改后保留。我把它改成了公共的,一切正常

这只是巧合,私有方法来自一个导入的项目。奇怪的是,Spring没有抛出一个错误,即私有方法上不存在请求映射或类似的错误

感谢所有看到这一点并试图找出答案的人

    $http.post('getUsingLocalDAO', $.param($scope.parameters), {
        headers : {
            "content-type" : "application/x-www-form-urlencoded"
        }
    }).success(function(data) {
        ...
    }).error(function(data) {
        ...

    $http.post('getUsingDependencyDAO', $.param($scope.parameters), {
        headers : {
            "content-type" : "application/x-www-form-urlencoded"
        }
    }).success(function(data) {
        ...
    }).error(function(data) {
        ...
    @RequestMapping("/getUsingBothDAO")
    private String getUsingBothDAO(
            @JsonProperty("param") String param) {
        getLocalDAO(param);
        getDependencyDAO(param);
        ...
    }