2014-07-27 13 views
5

Sto esaminando il codice di un progetto open source, mamute che utilizza CDI. Nella maggior parte delle classi esiste un costruttore no-arg deprecato e un costruttore annotato @Inject. This è una classe di esempio nel progetto menzionato che ha utilizzato questo approccio. Quindi la mia domanda è, dobbiamo avere un costruttore no-arg anche se abbiamo un costruttore annotato @Inject?Quando si utilizza CDI in Java è necessario il costruttore predefinito?

risposta

7

La classe collegata ha le seguenti importazioni e le annotazioni:

import br.com.caelum.vraptor.Controller; 
... 
import br.com.caelum.vraptor.routes.annotation.Routed; 
... 

@Routed 
@Controller 
public class QuestionController { 
    ... 
} 

ho trovato this javadoc for the Controller annotation.

@Target(value=TYPE) 
@Documented 
@Retention(value=RUNTIME) 
@Stereotype 
@RequestScoped 
public @interface Controller 

Annotare il @RequestScoped annotazioni qui.

L'ambito della richiesta è un ambito normale (oltre agli ambiti applicazione, sessione e conversazione) e JBoss Weld utilizza i proxy client per i normali scope con scope. Per essere in grado di creare i proxy Weld ha bisogno il seguente:

I seguenti tipi Java non possono essere approssimati dal contenitore:

  • classi che non dispone di un costruttore non privato senza parametri, e
  • ...

Fonte: Weld - CDI Reference Implementation, 4.9. Client proxies

In altri casi non è necessario il costruttore predefinito no-arg (vedere @Singleton beans).

Altri link:

Problemi correlati