为什么spring @autowired是null?

时间:2017-05-25 15:15:43

标签: spring

我试图在我的休息控制器中自动装配服务,如下所示:

休息控制器:

@ApplicationPath("/greetings")
@Component(immediate = true, service = Application.class)
public class RestControllerApplication extends Application {

    @Autowired
    private MyService myService;    

    public Set<Object> getSingletons() {
        return Collections.<Object>singleton(this);
    }


    @POST
    @Path("/getUploadType")
    @Produces("application/json")
    public JsonObject getUploadType() {
        ...
        myService.findUploadTypes();
        ...

    }

}

服务:

@Component
public class UploadService {

    private static final Logger log = Logger.getLogger(UploadService.class);

    @Autowired
    private OneDAO oneDAO;

    @Autowired
    private TwoDAO twoDAO;

...
}

但在我的休息控制器中,uploade服务为空。为什么呢?

3 个答案:

答案 0 :(得分:0)

Spring使用自己的一组注释。不应使用@Path@[HTTP method],而应使用@RequestMapping

您可以找到示例here

还有一个扩展示例here

答案 1 :(得分:0)

我可以使用以下几行代码访问我的bean:

WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
MyService myService = context.getBean(MyService.class);

答案 2 :(得分:0)

您宣布UploadService@Component,但在您的控制器中尝试自动装配 MyService个实例...

有两种选择:您可以在控制器中声明正确的服务类型,也可以UploadService继承MyService