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?
5
A
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: