2015-11-25 11 views
5

Wiem, że to powinno być bułka z masłem, ale po prostu nigdzie się nie dostaję.Jak mogę użyć właściwości YAML z wtyczką konstruktora w Spring Boot?

W moim wiosennym Boot aplikacji w pliku application.yml mam wpis tak:

some: 
    constructor: 
     property: value 

I mam usługę sprężyny (to jest fałszywy, ale demonstruje problem):

package somepackage; 

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

Startup nie powiedzie się, jeśli:

org.springframework.beans.factory.BeanCreationException: błąd tworzenie komponentu bean o nazwie "dummyService" zdefiniowanego w pliku [... (plik klasy ) ...]: Nie udało się utworzyć instancji komponentu bean; Zagnieżdżony wyjątek to org.springframework.beans.BeanInstantiationException: Nie powiodło się tworzenie instancji [somepackage.DummyService]: Nie znaleziono domyślnego konstruktora; wyjątek zagnieżdżonych jest java.lang.NoSuchMethodException. somepackage.DummyService()

Jak mogę przekonać Wiosna, że ​​powinien użyć konstruktora niepusty, i powinien dostać ten parametr konstruktora z pliku YAML? Uwaga: Nie używam żadnych plików konfiguracyjnych komponentu bean XML ani niczego innego i wolałbym tego nie robić.

Odpowiedz

2

Wystarczy umieścić adnotację @Apiowired na swoim konstruktorze.

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

Ah, ja @Autowired w niewłaściwym miejscu. Dziękuję bardzo. – user1953555

0

i tylko w przypadku gdy ktoś inny próbuje zrobić to w Scala - czyli to, czego naprawdę staramy się robić, ale chciał uzyskać odpowiedź w Javie przed próbą jej Scala - to działa:

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

} 

ta jest pokryta this SO case for scala constructor autowiring.

Powiązane problemy