User Root Resource: Use CDI Provider for subresources.

Resources are request scoped and we need only one sub resource per
request. That is, injecting all subresources (and their transitive
inejctions)in the constructor builds a lot of objects that are never
used.

Solution: Inject provider, that lazily inject the needed subresources
on demand.
This commit is contained in:
Johannes Schnatterer
2018-06-21 11:54:54 +02:00
parent 0df7156da0
commit ab290a78d9
3 changed files with 33 additions and 10 deletions

View File

@@ -2,28 +2,30 @@ package sonia.scm.api.v2.resources;
import com.google.inject.Inject;
import javax.inject.Provider;
import javax.ws.rs.Path;
@Path(UserRootResource.USERS_PATH_V2)
public class UserRootResource {
public static final String USERS_PATH_V2 = "v2/users/";
private final UserCollectionResource userCollectionResource;
private final UserResource userResource;
private final Provider<UserCollectionResource> userCollectionResource;
private final Provider<UserResource> userResource;
@Inject
public UserRootResource(UserCollectionResource userCollectionResource, UserResource userResource) {
public UserRootResource(Provider<UserCollectionResource> userCollectionResource,
Provider<UserResource> userResource) {
this.userCollectionResource = userCollectionResource;
this.userResource = userResource;
}
@Path("")
public UserCollectionResource getUserCollectionResource() {
return userCollectionResource;
return userCollectionResource.get();
}
@Path("{id}")
public UserResource getUserResource() {
return userResource;
return userResource.get();
}
}