簡體   English   中英

澤西島2 HK2中的asEagerSingleton對應什么?

[英]What corresponds to asEagerSingleton in HK2 in Jersey 2?

我正在使用Jersey 2開發REST API,我需要在啟動時實例化一些類,而不僅僅是在某些資源請求觸發時實例化。

因此,我要問的是:如何實現在服務器啟動時(而不是僅當有人命中某物時)創建下面定義的SomethingImpl實例? 在Guice中,我將使用.asEagerSingleton()

應用:

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(new AbstractBinder() {
            @Override
            protected void configure() {
                bind(" else").to(String.class);
                bind(SomethingImpl.class).to(Something.class).in(Singleton.class);
            }
        });

        register(SomeResource.class);
    }
}

東西:

public interface Something {
   String something();
}

public class SomethingImpl implements Something {
    @Inject
    public SomethingImpl(final String something) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println(something() + something);

                    try {
                        Thread.sleep(4000);

                    } catch (final InterruptedException e) {
                        break;
                    }
                }
            }
        }).start();
    }

    @Override
    public String something() {
        return "Something";
    }
}

一些資源:

@Path("/")
public class SomeResource {
    private final Something something;

    @Inject
    public SomeResource(final Something something) {
        this.something = something;
    }

    @GET
    @Path("something")
    public String something() {
        return something.something();
    }
}

在比Jersey集成的更高版本的hk2中(但即將集成),您可以使用標記為@Immediate的服務。 這些基本上一旦添加到hk2就可以開始使用。 但是,為了使其正常工作,您必須將即時上下文添加到系統中(例如https://hk2.java.net/2.2.0-b27/apidocs/org/glassfish/hk2/utilities/ServiceLocatorUtilities.html #enableImmediateScope%28org.glassfish.hk2.api.ServiceLocator%29

最好與Jersey團隊進行游說,以默認情況下啟用此作用域/上下文對(它們已經啟用了諸如PerThread作用域之類的功能)

我已經創建了這個問題: https ://java.net/jira/browse/JERSEY-2291以請求Jersey默認情況下啟用@Immediate服務

編寫一個javax.servlet.ServletContextListener的實現,並將該偵聽器添加到您的Web xml。

http://www.mkyong.com/servlet/what-is-listener-servletcontextlistener-example/

除了msknapp所說的以外,您還可以將@WebListener用作Servlet上下文偵聽器,這樣就不必將偵聽器添加到web.xml。 然后您的聽眾將看起來像

@WebListener
public class SomethingListener implements ServletContextListener {
    @Inject
    private final Something something;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //put code about something here
    }
}

暫無
暫無

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

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