我有一个与Web插件一起使用的spring boot应用程序。
我在一堂课上有
package com.test.company
@Component
@RestController
public class CompanyService {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private Environment env;
在另一堂课中,我有:
package com.test.company
@Component
@RestController
public class CustomerSignUpService {
private static MongoTemplate mongoTemplate;
@Autowired
private Environment env;
@Autowired
public void setMongoTemplate(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
两个类都可以工作,但是如果我尝试像在CusomterSignUpService
类中那样将mongo注入到CompanyService
类中,则env
会被很好地注入,但是mongo不会注入并且如果尝试使用它,则会得到一个空指针异常。
有什么想法吗? Main
软件包是com.test
。
答案 0 :(得分:4)
我相信您的Controller
可能需要看起来像(从财产中删除了static
):
package com.test.company
@Component
@RestController
public class CustomerSignUpService {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private Environment env;
...
...
}
答案 1 :(得分:3)
您可以在属性和设置器中同时使用@Autowired
,但是您的属性必须是实例变量,而不是静态变量。
这样做,您的代码应该可以正常运行:
package com.test.company
@Component
@RestController
public class CustomerSignUpService {
private MongoTemplate mongoTemplate;
@Autowired
private Environment env;
@Autowired
public void setMongoTemplate(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
请注意,static
保留字是从属性声明中提取的。
答案 2 :(得分:1)
从属性中删除静态元素,然后尝试不使用它
package com.test.company
@Component
@RestController
public class CustomerSignUpService {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private Environment env;
...
...
}