簡體   English   中英

Jersey:將Spring組件注入ContainerRequestFilter

[英]Jersey: Inject Spring component into ContainerRequestFilter

我使用Jersey 1.4 ea和Spring 3.0以及jersey-spring集成。 整合新澤西州和Spring作為描述資源類工作正常這里 我怎么想將一個spring組件注入到ContainerRequestFilter中來對請求進行一些預處理。

@Component
public class SecurityFilter implements ContainerRequestFilter {

    // UserManager is a declared spring component
    // Injecting it should work somehow
    @Autowired
    private UserManager userManager;

    @Override
    public ContainerRequest filter(ContainerRequest request) {
        System.out.println(userManager);
        // prints out null on request
    }
}

當我將應用程序部署到Glassfish時,都會注冊過濾器和用戶管理器bean。 我想知道我做錯了什么。 有沒有辦法將spring托管bean注入ContainerRequestFilter?

UPDATE

有點解決了。 問題是如果這些bean是Java代理(與生成的代理類相對),Jersey不會獲得Spring bean。 通過在spring配置的各個部分中指定proxy-target-class="true"屬性,指示Spring始終使用代理類而不是Java代理,可以解決該問題。 在我的場景中,我必須在<tx:annotation-driven proxy-target-class="true" />上指定它。

請參閱此處以獲取更詳細的分析以及可能的解決方法。

我對Jersey 1.6和Spring 3.0.5也有同樣的看法。 使用調試器,我可以說,即使我的代碼用@Component標記,Spring和Jersey都會實例化它們自己的這個類的副本:

@Path("/beams")
@Produces("text/xml")
@Component
@Scope("singleton")
public class BeamsResource {
}

有一些喋喋不休,這將在未來的澤西島版本中添加,但它現在似乎沒有工作。 我知道這是一個可怕的解決方案,但我正在使用一個靜態成員變量暫時將Jersey和Spring掛鈎。 的Bleh。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM