2017-03-09 1 views
0

Wie in derKann die @Value-Annotation von Spring mit Typen verwendet werden, die BeanPostProcessor implementieren?

javadoc for @Value erwähnt

können Sie nicht @Value innerhalb BeanPostProcessor oder BeanFactoryPostProcessor Arten

verwenden, aber es funktioniert gut für mich

@Component("emp") 
class Employee implements BeanPostProcessor { 
    @Autowired 
    public Employee(@Value("pankaj") String name) { 
     System.out.println(name); 
    } 

    @Override 
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
     return bean; 
    } 

    @Override 
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
     return bean; 
    } 
} 

Dies wird

pankaj 
Ausdrucken

Was fehlt mir?

Ich habe auch versucht, Ausdruck und es funktioniert auch: In Employee Klasse über geputtet

@Autowired 
    public Employee(@Value("#{example.name}") String name) { 
    System.out.println(name); 
    } 

und Beispiel-Klasse ist wie diese

@Component("example") 
public class Example { 
    public static String name="Abc"; 
} 

Diese Ausdrucken

Abc 

I versucht mit Property-Auflösung und es funktioniert auch für mich: propfolder/abc.properties

example.name = pankaj dubey spring.xml

<context:component-scan base-package="spring.tst.beans"/> 
<context:property-placeholder location="propfolder/abc.properties"/> 

Aktualisiert Employee Klasse mit folgenden Code

@Autowired 
    public Employee(@Value("${example.name}") String name) { 
    System.out.println(name); 
    } 
+0

Hier können wir @Value verwenden, aber wir sollten nicht verwenden ... –

Antwort

1

Das Javadoc bezieht sich auf die Eigenschaftsauflösungsfunktion der Annotation. Zum Beispiel könnten Sie

@Value("${example.pankaj}") 

haben, wo man es erwarten würde Frühling den Wert der Eigenschaft mit Schlüssel example.pankaj (von einer Eigenschaft Quelle) zu injizieren. In Ihrem Beispiel wird das nicht passieren. Stattdessen wird Spring den Wert

${example.pankaj} 

buchstäblich injizieren.

+0

Versuchte Spel auch seine Arbeits ... Edited oben Frage .. Dank –

+0

@PANKAJDUBEY Die javadoc die Eigenschaft Auflösung bezieht. Die Auflösung des SpEL-Ausdrucks ist ein ganz anderer Prozess. –

+0

Vielen Dank für Ihre Unterstützung. Ich versuchte auch mit Property-Auflösung und es funktioniert immer noch für mich .. über obige Frage noch einmal bearbeitet .. Tatsächlich habe ich auch "In Getting Started mit Spring Framework von Ashish Sarin @ page # 227" hier in der Notiz geschrieben, dass "@valu Annotation Wird von einem BeanPostProcessor verarbeitet, daher sollten Sie keine @value annotaionin-Komponentenklassen verwenden, die die BeanFactoryPostProcessor- oder die BeanPostProcessor-Schnittstelle implementieren. " –

Verwandte Themen