Ecco il mio caso d'uso. Supponiamo che le annotazioni abbiano abbiano ereditarietà e automaticamente erediteranno l'intero comportamento della classe base. Quindi farei quanto segue (nota le due istruzioni del pacchetto):
package cdiswitcher.precdi;
public @interface SessionScoped extends javax.faces.bean.SessionScoped {}
public @interface ManagedBean extends javax.faces.ManagedBean {}
package cdiswitcher.cdi;
public @interface SessionScoped extends javax.enterprise.context.SessionScoped {}
public @interface ManagedBean extends javax.inject.Named {}
Lo stesso per varie altre coppie di annotazioni come @ejb
e @inject
. Ciò semplificherebbe il passaggio tra i due sistemi di iniezione di bean: basta sostituire ogni istanza di cdiswitcher.precdi da cdiswitcher.cdi o viceversa.
Un altro caso d'uso potrebbe estendere il comportamento di un'annotazione, forse anche la creazione di una singola nuova annotazione che abbia lo stesso effetto di due esistenti.