@Autowired与@Autowired with Setter

时间:2018-08-08 20:26:32

标签: java spring mongodb

我有一个与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

3 个答案:

答案 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;

   ...
   ...
}