2017-05-25 114 views
-1

我想在我的休息控制器这样的自动装配服务:为什么spring @autowired是null?

休息控制器:

@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服务为空。为什么?

+0

使用无法检测UploadService的组件扫描问题? – StanislavL

+0

这似乎是你将jax-rs注释与Spring的混合。也许一个java ee容器为你提供了其余的控制器而不是Spring – Pelocho

+0

@Pelocho是的,这是个问题......如何将spring bean自动装入jax-rs组件? – 3vi

回答

0

我有访问我的豆,用这些代码几行:

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

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

你可以找到一个例子here

也有一个扩展的例子here

+0

问题是我正在使用liferay 7,希望使用jax-rs构建其他服务,但是我的所有应用程序都是用Spring创建的,而且我需要将spring bean注入此jax-rs rest controller – 3vi

0

您声明一个UploadService@Component,但试图在您的控制器中自动装入一个MyService实例...

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