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

时间:2019-09-17 10:02:06

标签: spring jersey payara

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

我的问题是,由于我是从Jersey终结点上的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

我猜想这与正在执行injection(HK2)的库有关,该库在使用@Inject时试图解决依赖关系本身,而不是在spring中寻找它。
如果相反,我使用@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>         

1 个答案:

答案 0 :(得分:0)

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