code: @Override
      public T inject(com.ibm.wsspi.injectionengine.InjectionTarget[] targets, InjectionTargetContext injectionContext) throws ManagedObjectException {
          T instance = getObject();
          synchronized (this) { //we really don't want inject being called twice at the same time
              try {
                  this.currentInjectionTargets = new HashSet<>();
                  this.currentInjectionContext = injectionContext;
                  this.websphereInjectionServices.registerInjectionTargetListener(this);
  
                  //save away the list of current WS Injection Targets
                  for (com.ibm.wsspi.injectionengine.InjectionTarget it : targets) {
                      this.currentInjectionTargets.add(it);
                  }
  
                  //use Weld to do the CDI injection
                  instance = cdiInjection(instance);
  
                  //when cdi injection occurs, we will "cross off" some of the injection targets as they are processed
                  //if there are any left then we directly use the injection engine to do the injection for those targets
                  for (com.ibm.wsspi.injectionengine.InjectionTarget it : this.currentInjectionTargets) {
                      if (it.getInjectionBinding().getAnnotationType() != Inject.class) {
                          try {
                              it.inject(instance, injectionContext);
                          } catch (InjectionException e) {
                              throw new ManagedObjectException(e);
                          }
                      }
                  }
              } finally {
                  //always tidy up before we release the lock
                  this.websphereInjectionServices.deregisterInjectionTargetListener(this);
                  this.currentInjectionContext = null;
                  this.currentInjectionTargets = null;
              }
  
          }
  
          return instance;
      }
docs: {@inheritDoc}