Advertisement
tpeierls

SelfInjectingServerResource

Mar 15th, 2012
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 1.32 KB | None | 0 0
  1. package org.restlet.ext.guice;
  2.  
  3. import java.util.concurrent.atomic.AtomicBoolean;
  4.  
  5. import javax.inject.Inject;
  6.  
  7. import org.restlet.resource.ServerResource;
  8.  
  9.  
  10. /**
  11.  * Base class for ServerResources that do their own member injection.
  12.  */
  13. public abstract class SelfInjectingServerResource extends ServerResource {
  14.  
  15.     /**
  16.      * Implemented by DI framework-specific code. For example, with
  17.      * Guice, the statically-injected MembersInjector just calls
  18.      * {@code injector.injectMembers(object)}.
  19.      */
  20.     public interface MembersInjector {
  21.         void injectMembers(Object object);
  22.     }
  23.  
  24.     /**
  25.      * Subclasseses overriding this method must call
  26.      * {@code super.doInit()} first.
  27.      */
  28.     protected void doInit() {
  29.         if (injected.compareAndSet(false, true)) {
  30.             memberInjector.injectMembers(this);
  31.         }
  32.     }
  33.  
  34.     @Inject private void injected() {
  35.         injected.set(true);
  36.     }
  37.  
  38.     /**
  39.      * Whether we've been injected yet. This protects against
  40.      * multiple injection of a subclass that gets injected
  41.      * before doInit is called.
  42.      */
  43.     private final AtomicBoolean injected = new AtomicBoolean(false);
  44.  
  45.     /**
  46.      * Must be statically injected by DI framework.
  47.      */
  48.     @Inject private static volatile MembersInjector memberInjector;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement