
本文共 17238 字,大约阅读时间需要 57 分钟。
Spring EL ���������������������
Spring3������������Spring������������������SpringEL,SpEL���������������,���������������Bean���������,������������������������������������������������������������������������������������������������,���������������C#������������������������,������������json xml������������������������
������������������SpringEL?
��������������������� ��������������������� ��������������������������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
el���������������������������������������������������
SpringEL ������������
NUGET��������� Install-Package Spring.EL
���������������spring.core������������������������������������������ EL ������������������������������������������
������������������������������������������������
- ExpressionEvaluator ���������������������������������������public static object GetValue(object root, string expression);public static object GetValue(object root, string expression, IDictionary variables)public static void SetValue(object root, string expression, object newValue)public static void SetValue(object root, string expression, IDictionary variables, object newValue)
������������������������������������������
���������������
[TestMethod] public void TestMethod_02() { string tonyPizza = (string)ExpressionEvaluator.GetValue(null, "'Tony''s Pizza'"); // evals to "Tony's Pizza" string helloWorld = (string)ExpressionEvaluator.GetValue(null, "'Hello World'"); // evals to "Hello World" double avogadrosNumber = (double)ExpressionEvaluator.GetValue(null, "6.0221415E+23"); int maxValue = (int)ExpressionEvaluator.GetValue(null, "0x7FFFFFFF"); // evals to 2147483647 DateTime birthday = (DateTime)ExpressionEvaluator.GetValue(null, "date('1974/08/24')"); DateTime exactBirthday = (DateTime)ExpressionEvaluator.GetValue(null, " date('19740824T131030', 'yyyyMMddTHHmmss')"); bool trueValue = (bool)ExpressionEvaluator.GetValue(null, "true"); object nullValue = ExpressionEvaluator.GetValue(null, "null"); }
Properties, Arrays, Lists, Dictionaries, Indexers
[TestMethod] public void TestMethod_03() { Inventor tesla = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); tesla.PlaceOfBirth.City = "Smiljan"; string invention = (string)ExpressionEvaluator.GetValue(tesla, "Inventions[2]"); // "Induction motor" string name = (string)ExpressionEvaluator.GetValue(tesla, "Members[0].Name"); // "Nikola Tesla" string invention1 = (string)ExpressionEvaluator.GetValue(tesla, "Members[0].Inventions[2]"); // "Wireless communication" Bar bar = new Bar(); int val = (int)ExpressionEvaluator.GetValue(bar, "[1]"); // evaluated to 2 ExpressionEvaluator.SetValue(bar, "[1]", 3); // set value to 3 }
Defining Arrays, Lists and Dictionaries Inline
[TestMethod] public void TestMethod_05() { var val = ExpressionEvaluator.GetValue(null, "{1, 2, 3, 4, 5}"); var val2 = ExpressionEvaluator.GetValue(null, "{'abc', 'xyz'}"); var val21 = ExpressionEvaluator.GetValue(null, "new int[] {1, 2, 3, 4, 5}"); var val22 = ExpressionEvaluator.GetValue(null, "#{'key1' : 'Value 1', 'today' : DateTime.Today}"); var val221 = ExpressionEvaluator.GetValue(null, "#{1 : 'January', 2 : 'February', 3 : 'March'}"); }
Methods
[TestMethod] public void TestMethod_06() { Inventor tesla = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); //string literal char[] chars = (char[])ExpressionEvaluator.GetValue(null, "'test'.ToCharArray(1, 2)"); // 't','e' //date literal int year = (int)ExpressionEvaluator.GetValue(null, "date('1974/08/24').AddYears(31).Year"); // 2005 // object usage, calculate age of tesla navigating from the IEEE society. int age = (int)ExpressionEvaluator.GetValue(tesla, "Members[0].GetAge(date('2005-01-01'))"); // 149 (eww..a big anniversary is coming up ;) }
Relational operators
[TestMethod] public void TestMethod_07() { var a1 = ExpressionEvaluator.GetValue(null, "2 == 2"); // true var a12 = ExpressionEvaluator.GetValue(null, "date('1974-08-24') != DateTime.Today"); // true var a13 = ExpressionEvaluator.GetValue(null, "2 < -5.0"); // false var a14 = ExpressionEvaluator.GetValue(null, "DateTime.Today <= date('1974-08-24')"); // false var a15 = ExpressionEvaluator.GetValue(null, "'Test' >= 'test'"); // true a1 = ExpressionEvaluator.GetValue(null, "3 in {1, 2, 3, 4, 5}"); // true a1 = ExpressionEvaluator.GetValue(null, "'Abc' like '[A-Z]b*'"); // true a1 = ExpressionEvaluator.GetValue(null, "'Abc' like '?'"); // false a1 = ExpressionEvaluator.GetValue(null, "1 between {1, 5}"); // true a1 = ExpressionEvaluator.GetValue(null, "'efg' between {'abc', 'xyz'}"); // true a1 = ExpressionEvaluator.GetValue(null, "'xyz' is int"); // false a1 = ExpressionEvaluator.GetValue(null, "{1, 2, 3, 4, 5} is ArrayList"); // true a1 = ExpressionEvaluator.GetValue(null, "'5.0067' matches '^-?\\d+(\\.\\d{2})?$'"); // false a1 = ExpressionEvaluator.GetValue(null, @"'5.00' matches '^-?\d+(\.\d{2})?$'"); // true }
Logical operators
[TestMethod] public void TestMethod_10() { Inventor ieee = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); // AND bool falseValue = (bool)ExpressionEvaluator.GetValue(null, "true and false"); //false string expression = @"IsMember('Nikola Tesla') and IsMember('Mihajlo Pupin')"; bool trueValue = (bool)ExpressionEvaluator.GetValue(ieee, expression); //true // OR trueValue = (bool)ExpressionEvaluator.GetValue(null, "true or false"); //true expression = @"IsMember('Nikola Tesla') or IsMember('Albert Einstien')"; trueValue = (bool)ExpressionEvaluator.GetValue(ieee, expression); // true // NOT falseValue = (bool)ExpressionEvaluator.GetValue(null, "!true"); // AND and NOT expression = @"IsMember('Nikola Tesla') and !IsMember('Mihajlo Pupin')"; falseValue = (bool)ExpressionEvaluator.GetValue(ieee, expression); }
Bitwise operators
[TestMethod] public void TestMethod_11() { // AND int result = (int)ExpressionEvaluator.GetValue(null, "1 and 3"); // 1 & 3 // OR result = (int)ExpressionEvaluator.GetValue(null, "1 or 3"); // 1 | 3 // XOR result = (int)ExpressionEvaluator.GetValue(null, "1 xor 3"); // 1 ^ 3 // NOT result = (int)ExpressionEvaluator.GetValue(null, "!1"); // ~1 }
Mathematical operators
[TestMethod] public void TestMethod_12() { // Addition int two = (int)ExpressionEvaluator.GetValue(null, "1 + 1"); // 2 String testString = (String)ExpressionEvaluator.GetValue(null, "'test' + ' ' + 'string'"); //'test string' DateTime dt = (DateTime)ExpressionEvaluator.GetValue(null, "date('1974-08-24') + 5"); // 8/29/1974 // Subtraction int four = (int)ExpressionEvaluator.GetValue(null, "1 - -3"); //4 Decimal dec = (Decimal)ExpressionEvaluator.GetValue(null, "1000.00m - 1e4"); // 9000.00 TimeSpan ts = (TimeSpan)ExpressionEvaluator.GetValue(null, "date('2004-08-14') - date('1974-08-24')"); //10948.00:00:00 // Multiplication int six = (int)ExpressionEvaluator.GetValue(null, "-2 * -3"); // 6 double twentyFour = (double)ExpressionEvaluator.GetValue(null, "2.0 * 3e0 * 4"); // 24 // Division int minusTwo = (int)ExpressionEvaluator.GetValue(null, "6 / -3"); // -2 var one = ExpressionEvaluator.GetValue(null, "8.0 / 4e0 / 2"); // 1 // Modulus int three = (int)ExpressionEvaluator.GetValue(null, "7 % 4"); // 3 one = ExpressionEvaluator.GetValue(null, "8.0 % 5e0 % 2"); // 1 // Exponent var sixteen = ExpressionEvaluator.GetValue(null, "-2 ^ 4"); // 16 // Operator precedence var minusFortyFive = ExpressionEvaluator.GetValue(null, "1+2-3*8^2/2/2"); // -45 }
Assignment
[TestMethod] public void TestMethod_13() { Inventor inventor = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); String aleks = (String)ExpressionEvaluator.GetValue(inventor, "Name = 'Aleksandar Seovic'"); DateTime dt = (DateTime)ExpressionEvaluator.GetValue(inventor, "DOB = date('1974-08-24')"); }
Expression lists
[TestMethod] public void TestMethod_14() { Inventor ieee = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); String pupin = (String)ExpressionEvaluator.GetValue(ieee.Members, "([1].Place.City = 'Beograd'; [1].Place.Name = 'Serbia'; [1].Name)"); }
Types
[TestMethod] public void TestMethod_15() { var a1 = ExpressionEvaluator.GetValue(null, "1 is int"); var a2 = ExpressionEvaluator.GetValue(null, "DateTime.Today"); var a3 = ExpressionEvaluator.GetValue(null, "new string[] {'abc', 'efg'}"); Inventor tesla = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); Type dateType = (Type)ExpressionEvaluator.GetValue(null, "T(System.DateTime)"); Type evalType = (Type)ExpressionEvaluator.GetValue(null, "T(Spring.Expressions.ExpressionEvaluator, Spring.EL)"); bool trueValue = (bool)ExpressionEvaluator.GetValue(tesla, "T(System.DateTime) == DOB.GetType()"); }
Type Registration & Constructors
[TestMethod] public void TestMethod_17() { Inventor2 tesla = new Inventor2("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); DateTime dt = (DateTime)ExpressionEvaluator.GetValue(null, "new DateTime(1974, 8, 24)"); // Register Inventor type then create new inventor instance within Add method inside an expression list. // Then return the new count of the Members collection. TypeRegistry.RegisterType(typeof(PlaceOfBirth)); int three = (int)ExpressionEvaluator.GetValue(tesla.Members, "( Add(new PlaceOfBirth('Aleksandar Seovic')); Count)"); TypeRegistry.RegisterType(typeof(Inventor)); Inventor aleks = (Inventor)ExpressionEvaluator.GetValue(null, "new Inventor('Aleksandar Seovic', date('1974-08-24'), 'Serbian', Inventions = new string[]{'SPELL'})"); }
Variables
[TestMethod] public void TestMethod_19() { Inventor tesla = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); Dictionaryvars = new Dictionary (); vars["newName"] = "Mike Tesla2"; var a = ExpressionEvaluator.GetValue(tesla, "Name = #newName", vars); ExpressionEvaluator.GetValue(tesla, "( #oldName = Name; Name = 'Nikola Tesla' )", vars); String oldName = (String)vars["oldName"]; // Mike Tesla vars["prez"] = "president"; Inventor2 pupin = (Inventor2)ExpressionEvaluator.GetValue(tesla, "Officers[#prez]", vars); }
The '#this' and '#root' variables
[TestMethod] public void TestMethod_20() { Inventor ieee = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); // sets the name of the president and returns its instance var a1 = ExpressionEvaluator.GetValue(ieee, "Officers['president'].( #this.Name = 'Nikola Tesla'; #this )"); var a2 = ExpressionEvaluator.GetValue(ieee, "Officers['president'].( #root.Officers.Remove('president'); #this )"); }
Ternary Operator (If-Then-Else)
[TestMethod] public void TestMethod_21() { String aTrueString = (String)ExpressionEvaluator.GetValue(null, "false ? 'trueExp' : 'falseExp'"); // trueExp } [TestMethod] public void TestMethod_22() { Inventor ieee = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); ExpressionEvaluator.SetValue(ieee, "Name", "IEEE"); Dictionaryvars = new Dictionary (); vars["queryName"] = "Nikola Tesla"; string expression = @"IsMember(#queryName) ? #queryName + ' is a member of the ' + Name + ' Society' : #queryName + ' is not a member of the ' + Name + ' Society'"; String queryResultString = (String)ExpressionEvaluator.GetValue(ieee, expression, vars); }
List Projection and Selection
[TestMethod] public void TestMethod_23() { Inventor ieee = new Inventor("Nikola Tesla", new DateTime(1856, 7, 9), "Serbian"); IList placesOfBirth = (IList)ExpressionEvaluator.GetValue(ieee, "Members.!{Name}"); // { 'Smiljan', 'Idvor' } IList serbianInventors = (IList)ExpressionEvaluator.GetValue(ieee, "Members.?{Name == '1'}"); // { tesla, pupin } IList sonarInventors = (IList)ExpressionEvaluator.GetValue(ieee, "Members.?{'1' in Inventions}"); // { pupin } IList sonarInventorsNames = (IList)ExpressionEvaluator.GetValue(ieee, "Members.?{'1' in Inventions}.!{Name}"); // { 'Mihajlo Pupin' } var a1 = ExpressionEvaluator.GetValue(ieee, "Members.^{Name == '1'}.Name"); // 'Nikola Tesla' var a3 = ExpressionEvaluator.GetValue(ieee, "Members.${Name == '3'}.Name"); // 'Mihajlo Pupin' }
Collection Processors and Aggregators
[TestMethod] public void TestMethod_24() { var a1 = ExpressionEvaluator.GetValue(null, "{1, 5, -3}.count()"); // 3 var a2 = ExpressionEvaluator.GetValue(null, "count()"); // 0 a2 = ExpressionEvaluator.GetValue(null, "{1, 5, -3, 10}.sum()"); // 13 (int) a2 = ExpressionEvaluator.GetValue(null, "{5, 5.8, 12.2, 1}.sum()"); // 24.0 (double) a2 = ExpressionEvaluator.GetValue(null, "{1, 5, -4, 10}.average()"); // 3 a2 = ExpressionEvaluator.GetValue(null, "{1, 5, -2, 10}.average()"); // 3.5 a2 = ExpressionEvaluator.GetValue(null, "{1, 5, -3, 10}.min()"); // -3 a2 = ExpressionEvaluator.GetValue(null, "{'abc', 'efg', 'xyz'}.min()"); // 'abc' a2 = ExpressionEvaluator.GetValue(null, "{1, 5, -3, 10}.max()"); // 10 a2 = ExpressionEvaluator.GetValue(null, "{'abc', 'efg', 'xyz'}.max()"); // 'xyz' a2 = ExpressionEvaluator.GetValue(null, "{ 'abc', 'xyz', null, 'abc', 'def', null}.nonNull()"); // { 'abc', 'xyz', 'abc', 'def' } a2 = ExpressionEvaluator.GetValue(null, "{ 'abc', 'xyz', null, 'abc', 'def', null}.nonNull().distinct().sort()"); // { 'abc', 'def', 'xyz' } a2 = ExpressionEvaluator.GetValue(null, "{ 'abc', 'xyz', 'abc', 'def', null, 'def' }.distinct(true).sort()"); // { null, 'abc', 'def', 'xyz' } a2 = ExpressionEvaluator.GetValue(null, "{ 'abc', 'xyz', 'abc', 'def', null, 'def' }.distinct(false).sort()"); // { 'abc', 'def', 'xyz' } }
DI Object References(���������DI������������������)
[TestMethod] public void TestMethod_26() { Dictionaryvars = new Dictionary (); vars["_sprint_context_resove_"] = new SprintContextResove((name) => { if (name == "Inventor") return new Inventor("a", DateTime.Now, "d"); return new Inventor2("a", DateTime.Now, "d"); }); var IsMember = ExpressionEvaluator.GetValue(null, "@(Inventor).IsMember('Nikola Tesla1')", vars); }
���������������
������������ Java��� Spring���������������������������
������autofac��������������� ��� ������ ������������������������������
������������ ��������������������������� ���������DI ���������DI��� ������������������������������������������ ���������������������������������������������������
���������������������
������������ | ������������ | ������������ |
---|---|---|
AutoConfiguration | ������class������ | ������������class������������Bean��������������� |
Bean | ������������������ | ������AutoConfiguration������������ |
Component | ������class������ | ������������ |
Autowired | ���������������������Parameter���������Property���������Field | ������������ |
PropertySource | ������class������ | ������Value���������������������Value���������������������json,xml,������������������ |
Value | ���������������������Parameter���������Property���������Field | ������������������(������SPEL���������) |
Aspect | ������class������ | ������������������������������������������������������������������������������ |
���������������������������������������������������������
发表评论
最新留言
关于作者
