Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring HK2没有看到春豆_Spring_Spring Boot_Jersey 2.0_Hk2 - Fatal编程技术网

Spring HK2没有看到春豆

Spring HK2没有看到春豆,spring,spring-boot,jersey-2.0,hk2,Spring,Spring Boot,Jersey 2.0,Hk2,我有一个带有Jersey 2 REST服务的Spring Boot应用程序。 Spring Boot似乎初始化正确,我有Jersey Spring bridge('org.glassfish.Jersey.ext:Jersey-spring3:2.22.2')。 尽管如此,仍然会抛出以下错误,然后REST控制器(JAX-RS2.0)被初始化,并且必须向其中注入Springbean org.glassfish.hk2.api.UnsatisfiedDependencyException: Ther

我有一个带有Jersey 2 REST服务的Spring Boot应用程序。 Spring Boot似乎初始化正确,我有Jersey Spring bridge('org.glassfish.Jersey.ext:Jersey-spring3:2.22.2')。 尽管如此,仍然会抛出以下错误,然后REST控制器(JAX-RS2.0)被初始化,并且必须向其中注入Springbean

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection
什么会导致这样的错误

bean是存在的,并用@Named注释,因此这不是问题所在。springboot默认也会扫描JSR-330注释

编辑: 初始化通过以下方式完成:

@SpringBootApplication
public class Application extends SpringBootServletInitializer implements WebApplicationInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
}
}
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">

  <servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
  </servlet>

  <servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
控制器是:

@Named
@Singleton
@Path("/RequestEndEvent")
public class RequestEndEventController {

    private final Logger log = LoggerFactory.getLogger(getClass());
    @Inject
    private RequestEndEventLogger logger;

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response sendRequestEndEvent(RequestEndEvent requestEndEvent) {
        logger.addRequestEndEvent(requestEndEvent);
        return Response.status(Response.Status.OK).build();
    }
}

实际问题是在评论中发现的(原始问题中没有显示)

使用
@SpringBootApplication
(三个注释的别名,包括
@ComponentScan
),您可以使用Spring免费进行组件扫描。但是组件扫描的工作原理(不指定要扫描的包)是它将扫描
@ComponentScan
注释类的包及其子包。因此,建议将“application”类放在根包中,并将所有其他包作为该包的子包,例如

com.app
   Application
com.app.services
   LoggingService
com.app.repos
   UserRepo 

通过此设置,所有包都会被扫描以查找带注释的组件类。我猜OP没有这样设置,所以在扫描中没有检测到Spring组件

您的
RequestEventLogger
在哪里?我可以告诉您,将Spring服务注入Jersey/HK2资源/服务并不是Spring Boot的问题。您如何知道记录器确实在Spring上下文中?您是否尝试过注入
ApplicationContext
并尝试显式地
ctx.getBean(RELogger.class)
以查看它是否在上下文中?@peeskillet您是对的。我按照你的建议试过了,Spring也找不到这个班。这是一个带有\@命名注释的简单类,因此应该由Spring获取。记录器在哪个包中?它应该与应用程序类位于同一个包中,或者位于子包中,以便在scan@peeskillet这就是一揽子计划的问题。我把应用程序类一的软件包向上移动,突然间一切都正常了。谢谢。你想发布一个答案,还是我应该先重新措辞这个问题?我得到了同样的错误,但修复不适合我。我按照这里的解决方案重新排列了这些类,但仍然得到相同的错误。我的配置与问题中所述的类似。有什么帮助吗?@AndyDufresne发布了一个新的详细问题以获得更好的帮助。显然,错误是因为依赖注入。未注入依赖项,因此触发了上述错误。谢谢
com.app
   Application
com.app.services
   LoggingService
com.app.repos
   UserRepo