在SpringBoot应用程序中自动装配Bean

时间:2018-10-16 15:01:33

标签: spring-boot dependency-injection

当前,我想自动装配的bean返回一个nullpointerException。

这是Application类:

package com.springbootapp.jerseyws;
.
.
.


  @SpringBootApplication
    public class JerseywsApplication {

    @Bean
    public CountryService countryService() {
        return new CountryService();
    }

    public static void main(String[] args) {
        SpringApplication.run(JerseywsApplication.class, args);
    }
}

这里是控制器:

package com.springbootapp.jerseyws.controller;
.
.
.
    @Path("/country")
    public class CountryController {

    @Autowired
    private CountryService countryService;

    public CountryController() {
        //countryService = new CountryService();
    }

    @Path("list")
    @GET
    @Produces({MediaType.APPLICATION_JSON})
    public List<Country> getCountries() {
        return countryService.getCountries(); // <------ countryService is null
    }
}

这是国家/地区服务:

package com.springbootapp.jerseyws.service;
.
.
.
    @Service
    public class CountryService {

    public List<Country> getCountries() {
        Country c1 = new Country("USA", 320);
        Country c2 = new Country("Norway", 6);
        Country c3 = new Country("Sweden", 10);
        List<Country> countryList = new ArrayList<>();
        countryList.add(c1);
        countryList.add(c2);
        countryList.add(c3);
        return countryList;
    }
}

此示例基于注释。遗漏了一些东西,因为我尝试通过@Autowired注释实例化的bean为空。

2 个答案:

答案 0 :(得分:0)

您的控制器需要@RestController批注,否则它将不会在spring上下文中注入。如果某个类不属于spring上下文,则不能有@Autowired个类。

@Path("/country")
@RestController
public class CountryController {

也删除

@Bean
public CountryService countryService() {
    return new CountryService();
}

您不需要

答案 1 :(得分:0)

尝试从控制器类中删除以下代码段。如果您已经用@restcontroller注释了控制器,则不需要空的构造函数

public CountryController() {
    //countryService = new CountryService();
}