Angularjs Spring控制器有时具有null@Autowired对象,并且似乎不受Spring上下文的管理
我有一个这样定义的Spring控制器,它有两个请求映射,一个使用localDAO,另一个使用dependencyDAO。LocalDAO类存在于我的项目中,DependencyDAO类通过maven dependency导入: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
@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);
...
}