2015-06-04 5 views
7

मैं एक स्प्रिंग बीन के रूप में जावा 8 विधि संदर्भ घोषित करना चाहता हूं। स्प्रिंग एक्सएमएल फ़ाइल में ऐसा करने का सबसे आसान तरीका क्या है?एक स्प्रिंग एक्सएमएल फ़ाइल में जावा 8 विधि संदर्भ कैसे घोषित करें?

उदाहरण के लिए, मेरे पास है:

class Foo { 
    Foo(ToLongFunction<Bar> fn) { ... } 
} 

class Bar { 
    long getSize() { ... } 
} 

... और मैं एक Foo कि निर्माता तर्क के रूप में विधि संदर्भ Bar::getSize लेता है बनाना चाहते हैं।

मैं वसंत बीन एक्सएमएल फ़ाइल में Foo उदाहरण कैसे घोषित करूं?

+4

मैं कहूंगा कि आप नहीं करते ... मैं इसके बजाय जावा आधारित कॉन्फ़िगरेशन का उपयोग करने का सुझाव देता हूं .. –

+0

जावा-आधारित कॉन्फ़िगरेशन अभी एक विकल्प नहीं है। – Kkkev

+0

यदि आपको उत्तर नहीं मिलता है तो एक स्प्ल विधि कॉल करें जो आपके कोड में करता है। – tgkprog

उत्तर

1

नीचे मेरा प्रस्तावित समाधान शायद सबसे अच्छा विचार नहीं है, लेकिन मुझे सवाल दिलचस्प लगता है और इसे एक शॉट देने का प्रयास करने का फैसला किया गया। यह सबसे अच्छा है जिसके साथ मैं आ सकता हूं।

मुझे नहीं पता कि इस पल में सीधे ऐसा करने का कोई तरीका है (किसी प्रकार के फैक्ट्री बीन को परिभाषित करने के अलावा), लेकिन वैकल्पिक रूप से आप इसे गतिशील भाषा समर्थन का उपयोग करके कर सकते हैं, उदाहरण के लिए ग्रोवी के साथ।

निम्न उदाहरण इस

public class Foo { 

    private Function<String, String> task; 

    @Autowired 
    public Foo(Function<String, String> task){ 
     this.task = task; 
    } 

    public void print(String message) { 
     System.out.println(task.apply(message));  
    } 

} 

की तरह एक सेम मान लें तो फिर मैं की तरह एक XML विन्यास निर्धारित कर सकते हैं वसंत के नवीनतम संस्करण का उपयोग (आज 4.1.6 के रूप में)

मेरे लिए भाग गया:

<lang:groovy id="func"> 
    <lang:inline-script> 
     <![CDATA[ 
       import java.util.function.Function 
       { text -> "Hello " + text } as Function 
     ]]> 
    </lang:inline-script> 
</lang:groovy> 

<bean id="foo" class="demo.services.Foo"> 
    <constructor-arg name="task" ref="func"/> 
</bean> 

बेशक, आपके लैम्ब्डा का सिंटैक्स आपके द्वारा चुने गए भाषा पर निर्भर करेगा। मुझे पता नहीं है कि ग्रोवी के पास विधि संदर्भ की तरह कुछ है, लेकिन जैसा कि मैंने उपरोक्त किया है, लैम्बडा/बंद होने के साथ किसी भी विधि संदर्भ को व्यक्त किया जा सकता है।

संबंधित मुद्दे