मान लीजिए कि हम निम्नलिखित कोड का टुकड़ा करते हैं, कि कई प्राइम संख्या के साथ एक सूची भरता है और एक स्पेल संदर्भ में एक चर के रूप में परिभाषित:
// create an array of integers
List<Integer> primes = new ArrayList<Integer>();
primes.addAll(Arrays.asList(2,3,5,7,11,13,17));
// create parser and set variable 'primes' as the array of integers
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext ctx = new StandardEvaluationContext();
ctx.setVariable("primes", primes);
अब, अगर हम सूची को संकीर्ण और प्राप्त करना चाहते हैं सभी प्रमुख संख्याएं> 10 हैं, हम ?[]
चयन ऑपरेटर का उपयोग कर सकते हैं। बयान यह एक होगा:
Expression expression = parser.parseExpression("#primes.?[#this>10]");
List<Integer> primesGreaterThanTen = (List<Integer>) expression.getValue(ctx);
आप देख सकते हैं, अभिव्यक्ति का मूल्यांकन किया जाना #primes.?[#this > 10]
है। यह कैसे काम करता है ?
#primes
primes
सूची को संदर्भित करता है।
?[]
चयन ऑपरेटर सूची में i
प्रत्येक ऑब्जेक्ट से मेल खाता है शून्य नहीं है और जो ब्रैकेट में दिए गए मानदंडों से मेल खाता है। हमारे उदाहरण में, मानदंड #this > 10
है। #this
वर्तमान मूल्यांकन ऑब्जेक्ट को संदर्भित करता है, जो हमारे उदाहरण में ऑब्जेक्ट की सूची से ऑब्जेक्ट होगा जो इस समय चेक-इन और 10 के लिए चेक किया जा रहा है।
मूल्यांकन से परिणाम एक सूची हो जाएगा, युक्त
[11, 13, 17]
एक स्पेल संदर्भ एक #root
चर हो सकता है। चलो इस साधारण क्लास करते हैं:
public class SomeCustomObject {
public int stringLength(String input) {
if (input == null) return 0;
return input.length();
}
}
और #root
चर के रूप में हमारे SomeCustomObject
का एक उदाहरण परिभाषित करते हैं।
SomeCustomObject someObject = new SomeCustomObject();
context.setRootObject(someObject);
यह someObject
चर स्पेल संदर्भ के लिए एक रूट वस्तु का निर्माण करेगा।
#root
चर के साथ एक साधारण उदाहरण।
String name = "kocko";
ctx.setVariable("name", kocko);
String statement = "#root.stringLength(#kocko) == 5";
Expression expression = parser.parseExpression(statement);
boolean result = expression.getValue(context, Boolean.class);
result
चर true
के रूप में मूल्यांकन किया जाएगा।
#root
की शक्ति क्या है?
एक ही रूट ऑब्जेक्ट के माध्यम से, आप अपने अभिव्यक्तियों के लिए एक व्यापक, कस्टम वातावरण का पर्दाफाश कर सकते हैं, उदाहरण के लिए कस्टम उपयोगिता विधियों और/या चर।
और जानकारी: