2015-11-25 10 views
5

So che questo dovrebbe essere un pezzo di torta, ma non sto arrivando da nessuna parte.Come posso utilizzare le proprietà YAML con l'iniezione del costruttore in Spring Boot?

Nella mia Primavera di avvio applicazione, nel file application.yml, ho una voce in questo modo:

some: 
    constructor: 
     property: value 

E io avere un servizio di primavera (questo è falso, ma dimostra il problema):

package somepackage; 

@Service 
public class DummyService { 
    public DummyService(@Value("${some.constructor.property}") String path) {} 
} 

avvio non riesce, però:

org.springframework.beans.factory.BeanCreationException: Errore creazione di bean con nome 'dummyService' definito nel file [... (il file classe ) ...]: Instantiation of bean failed; l'eccezione annidata è org.springframework.beans.BeanInstantiationException: Impossibile instantiate [somepackage.DummyService]: Nessun costruttore predefinito trovato; eccezione annidata è java.lang.NoSuchMethodException:. somepackage.DummyService()

Come posso convincere primavera che dovrebbe utilizzare il costruttore non vuoto, e dovrebbe ottenere che il parametro del costruttore dal file YAML? Nota: non sto usando alcun file di configurazione del bean XML o altro, e preferirei non farlo.

risposta

2

Basta inserire l'annotazione @Autowired sul costruttore.

@Autowired 
public DummyService(@Value("${some.constructor.property}") String path) {} 
+0

Ah, avevo @Autowired nel posto sbagliato. Grazie mille. – user1953555

0

E solo nel caso in cui qualcun altro sta cercando di fare questo a Scala - che è quello che mi è stato veramente cercando di fare, ma ha voluto ottenere la risposta in Java prima di provare con Scala - questo funziona:

@Service 
class DummyService @Autowired()(@Value("${some.constructor.property}") val path: String) { 

} 

Questo è trattato nel this SO case for scala constructor autowiring.

Problemi correlati