package org.jooby; import javax.inject.Inject; import javax.inject.Provider; import javax.inject.Singleton; import org.jooby.mvc.GET; import org.jooby.mvc.Path; import org.jooby.test.ServerFeature; import org.junit.Test; public class ScopeOfMvcRouteFeature extends ServerFeature { public static class RequestScoped { static int instances = 0; { instances += 1; } @Override public String toString() { return "" + instances; } } @Path("/s") @Singleton public static class Single { static int instances = 0; private Provider<RequestScoped> requestScoped; @Inject public Single(final Provider<RequestScoped> requestScoped) { instances += 1; this.requestScoped = requestScoped; } @GET public Object m() { return instances + "=" + requestScoped.get(); } } @Path("/p") public static class Proto { static int instances = 0; private RequestScoped requestScoped; @Inject public Proto(final RequestScoped requestScoped) { instances += 1; this.requestScoped = requestScoped; } @GET public Object m() { return instances + "=" + requestScoped.toString(); } } { use(Single.class); use(Proto.class); } @Test public void singleton() throws Exception { RequestScoped.instances = 0; Single.instances = 0; Proto.instances = 0; request() .get("/s") .expect("1=1"); request() .get("/s") .expect("1=2"); request() .get("/s") .expect("1=3"); } @Test public void proto() throws Exception { RequestScoped.instances = 0; Single.instances = 0; Proto.instances = 0; request() .get("/p") .expect("1=1"); request() .get("/p") .expect("2=2"); request() .get("/p") .expect("3=3"); } }