Qualifier

Ich habe folgende Methdoe:

  @Produces
  @Current
  @Angemeldet
  public Principal getCurrentUser()
  {
    if (this.userPrincipal == null)
    {
      HttpServletRequest request = getServletRequest();
      this.userPrincipal = request.getUserPrincipal();
      
      if (this.logger.isDebugEnabled())
      {
        this.logger.debug("userPrincipal: " + this.userPrincipal);
      }

      if (this.userPrincipal != null)
      {
        String userId = this.userPrincipal.getName();

        if (!isAnonymous(userId))
        {
          this.effectiveUserPrincipal = this.userPrincipal;
        }
      }
    }

    return this.effectiveUserPrincipal;
  }

@Current und @Angemeldet sind glaube ich Qualifier. Kann mir jemand sagen wofür die sind? Was macht die @Produces Annotation in dieser Methode?

Die Annotation gibt an, welchen Content (JSON, XML, HTML etc.) eine Methode als Teil eines Response erzeugt. Das wird normalerweise durch die entsprechenden Media-Typen als String-Parameter mitgegeben. Habe die Annotation noch nie ohne gesehen. Ist aber wohl legal und heißt “kann alles”. Dann muss der Container automagisch den Content erzeugen.

Im CDI erzeugt @Produces eine Bean, in diesem Fall einen Principal, und macht die Bean im CDI-Context bekannt. Die beiden anderen Annotationen sind vermutlich eigene Qualifier. Das solltest Du in den Imports erkennen können. Das sind keine Standard CDI Qualifier. Mit einem Qualifier gibst Du an, welche Implementation verwendet werden soll.

http://docs.oracle.com/javaee/6/tutorial/doc/gjbck.html