b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

OGNL语言介绍和练习(2)

电脑杂谈  发布时间:2020-05-29 03:21:21  来源:网络整理

    public static void setValue(java.lang.String expression, 
                                 java.util.Map context, 
                                 java.lang.Object root, 
                                 java.lang.Object value) 
                          throws OgnlException 
     Evaluates the given OGNL expression to insert a value into the 
     object graph rooted at the given root object given the context. 
     Parameters: 
     expression - the OGNL expression to be parsed 
     root - the root object for the OGNL expression 
     context - the naming context for the evaluation 
     value - the value to insert into the object graph

OGNL的API设计得非常简单. context为变量和表达式的求值过程提供了上下文,提供了名称空间,存储了变量等,为通过根的对象图遍历指定了初始变量,并使用表达式告诉Ognl如何完成计算. 看一下以下两个简单的代码片段: \

User user1 = new User(); 
user1.setId(1); 
user1.setName("firer"); 		
User user2 = new User(); 
user2.setId(2); 
user2.setName("firer2"); 		
List users = new ArrayList(); 
users.add(user1); 
users.add(user2); 		
Department dep = new Department(); 
dep.setUsers(users); 
dep.setName("dep"); 
dep.setId(11); 		
Object o = Ognl.getValue("users[1].name", dep);

在这里,我们可以看到使用前面介绍的表达语言的优势. 使用“用户[1] .name”,可以完成name的值,而无需执行类型转换和其他工作. 以下是一个简单的设置示例.

User user = new User(); 
user.setId(1); 
user.setName("ffirer"); 		
Ognl.setValue("department.name", user, "dep1");

ognl $_ognl map_ognl map

正如我前面提到的,Ognl还可以做其他一些工作. 一个例子是,在日常工作中,我们经常需要从列表中“搜索”满足我们要求的对象. 使用Java时,我们需要遍历列表,类型转换,值ognl map,然后进行比较以获得所需的值,而使用Ognl将使此过程变得简单而优雅. 代码段:

User user1 = new User(); 
 user1.setId(1); 
 user1.setName("firer"); 
 // 如上例创建一些 User 
 List users = new ArrayList(); 
 users.add(user1); 
 // 将创建的 User 添加到 List 中
 Department dep = new Department(); 
 dep.setUsers(users); 
 List names = (List)Ognl.getValue("users.{name}", dep); 
 List ids = (List)Ognl.getValue("users.{? #this.id > 1}", dep);

此表达式“ users. {name}”将获得列表中所有用户的name属性,并将其返回到另一个列表中. “ users. {?#this.id> 1}”将返回ID大于1的所有用户,并以包含所有User对象的列表的形式返回. 这里使用Ognl“列表投影”操作是因为它被调用,因为它更像是返回中某些列的操作. Ognl还有许多其他功能. 了解如何在Ognl的SVN()测试用例中使用它们.

OGNL或表达式语言的性能主要由两个方面决定,一个方面是表达式的解析(Parser),另一个方面是表达式的执行. OGNL使用javaCC来完成解析器实现. 在OGNL 2.7中,还增强了OGNL的执行部分,并使用javasisit生成JIT(Just-In-Time)字节码来完成表达式的执行. Ognl将此函数命名为: OGNL Expression Compilation. 基本的使用方法是:

SimpleObject root = new SimpleObject(); 
 OgnlContext context =  (OgnlContext) Ognl.createDefaultContext(null); 
 Node node =  (Node) Ognl.compileExpression(context, root, "user.name"); 
 String userName = (String)node.getAccessor().get(context, root);

那么Expression Compilation对Ognl的性能有何影响?性能方面的简单测试: 与四种情况相比: 直接Java调用(1),OGNL缓存使用表达式编译(2),OGNL缓存使用已解析的OGNL表达式(3),结果不使用任何缓存(4).

性能对比

性能对比

您可以看到表达式编译与使用Java调用时非常接近,因此可以看到,当要多次使用表达式时,将使用表达式编译并且缓存已完成,OGNL是非常接近直接调用Java的时间.

本文介绍了OGNL的概念,表达式语法以及如何使用OGNL,并提供了一些简单的示例代码,OGNL也可以在实际应用中进行扩展,在本文中并为有兴趣的读者可以进一步进行相关的学习和研究.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-225969-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 王强
      王强

      会趁机坐大滴

    • 张绪政
      张绪政

      怎么就不能科学一点地去想想失足妇女合法化呢

    热点图片
    拼命载入中...