forked from linkedin/rest.li
-
Notifications
You must be signed in to change notification settings - Fork 0
Spring Dependency Injection
Joe Betz edited this page Aug 28, 2013
·
14 revisions
To bind rest.li’s dependency injection to spring.
package com.linkedin.restli.server.spring;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import com.linkedin.restli.internal.server.model.ResourceModel;
import com.linkedin.restli.server.resources.ResourceFactory;
/**
* This is Spring specific {@link ResourceProvider}, which injects dependencies
* to the resource classes, which are expressed using JSR-330 annotations.
* This class delegates calls to the more general InjectResourceProvider, which
* is declared in {@link com.linkedin.restli.server.resources.InjectResourceFactory}.
* This class initialization order which occurs in Spring: first, when this class is
* instantiated by Spring, {@link #setApplicationContext(ApplicationContext)} method is
* invoked, later RestLi invokes {@link #setRootResources(Map)} method, which concludes
* initialization process.
*
* @author jodzga
*/
public class InjectResourceFactory implements ResourceFactory, ApplicationContextAware
{
private static final Logger log = LoggerFactory.getLogger(InjectResourceFactory.class);
private com.linkedin.restli.server.resources.InjectResourceFactory _delegate;
@Override
public <R> R create(Class<R> resourceClass)
{
return _delegate.create(resourceClass);
}
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException
{
log.debug(String.format("Setting application context '%s'", ctx.getDisplayName()));
_delegate = new com.linkedin.restli.server.resources.InjectResourceFactory(new SpringBeanProvider(ctx));
}
/**
* @see com.linkedin.restli.server.spring.LinkedInSpringResourceFactory#setRootResources(java.util.Map)
*/
@Override
public void setRootResources(Map<String, ResourceModel> rootResources)
{
_delegate.setRootResources(rootResources);
}
}