2016-08-09 59 views
1

DienstSpring Wert Annotation funktioniert nicht in Konstruktorargument

@Service 
class Foo{ 
    Foo(@Value("${my.property}")int delay){ 
    ... 
    } 
} 

Consumer

class Bar { 
    @Autowire 
    Foo foo; 
} 

beans.xml

<context:component-scan base-package="foo.*" /> 
<context:spring-configured /> 
<context:property-placeholder location="classpath:foo/internal.properties"/> 

internal.properties enthält my.property=5000. Aber es scheint, als ob der Frühling sich nicht einmal um die @Value Annotation kümmert. Wenn ich die Anwendung starte, beschwert sich Spring darüber, dass kein Standardkonstruktor gefunden wurde.

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [foo.Foo]: No default constructor found; nested exception is java.lang.NoSuchMethodException... 

Ich habe sogar versucht, den Parameter in beans.xml mit dem constructor-arg Tag zu konfigurieren. Diese Methode erzeugt den gleichen Fehler.

Warum funktioniert die Werteingabe nicht?

Antwort

3
@Service 
class Foo{ 
    @Autowired 
    Foo(@Value("${my.property}")int delay){ 
    ... 
    } 
} 

Sie vergessen zu @Autowired in Ihrem Konstruktor hinzuzufügen. nur definieren one constructor

+0

Große Informationen über nicht benötigen '@ Autowired' für einzelne Konstruktor Klasse

Von Frühling 4.3 wir nicht mehr benötigen, die @Autowired Anmerkung angeben, ob das Ziel Bean. –

-2

Ich denke, Ihr Problem ist, Sie fehlen Konstruktor (überprüfen Sie Ihre Ausnahme). Für Bean ist es wichtig, einen Standardkonstruktor (keine Argumente) zu erstellen. Mehr dazu lesen Sie unter here. Das ist ein guter Artikel.