@ Inject不适用于春季5球衣2.29.1,但@Autowire可以

问题描述 投票:0回答:1

我有一个Web应用程序,该应用程序使用在Payara 5.1.3上运行的JSF Spring5 Jersey2.29.1(spring-jersey5)。DI部分由Spring处理,使用@Inject处理。

我的问题是,由于我已经从球衣端点上的Jersey2.25 Spring-Jersey4和Payara 4.1.9.2迁移了,因此我无法对弹簧豆使用@Inject,因此必须使用@Autowired。我收到的错误是:

    Severe: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type MyService with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private my.company.rest.internal.workflowengine.LeaveFlowEndpoint.myService

我想它与执行注入(HK2)的库有关,该库在使用@Inject时试图解决依赖关系本身,而不是在春季寻找它。如果相反,我使用@Autowired就像一个魅力。

任何想法我为什么要得到这个?

PS hk2版本为2.29.1

web.xml配置:

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>         
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>my.company.endpoints.rest</param-value>   
    </init-param>       
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

我必须在这里使用其他(支持弹簧的类):

 <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>         

spring jersey payara
1个回答
0
投票

就我而言,问题与以下事实有关:在部署到Payara时,未禁用隐式cdi标志。一旦禁用它就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.