- 浏览: 1589832 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
使用p名称空间配置属性
使用p命名空间的功能 和 <property>
使用util Schema
spring表达式 简称 SpEL
先把 表达式在bean中的使用给出来
使用p命名空间的功能 和 <property>
<bean id="p_chinese" class="cn.sh.springmvc_java.Chinese" p:name="admin" p:axe-ref="stoneAxe"/> <bean id="u_chinese" class="cn.sh.springmvc.model.Chinese" p:age-ref="chin.age" p:axe-ref="stoneAxe" p:schools-ref="chin.schools" p:axes-ref="chin.axes" p:scores-ref="chin.scores"/> <!--如果某个bean的属性名以"-ref"结尾,这样p命名空间会出现冲突--->
使用util Schema
<!-- 将指定类的静态Field暴露出来 --> <util:constant id="chin.age" static-field="java.sql.Connection.TRANSACTION_SERIALIZABLE"/> <!-- 将指定bean的属性 暴露出来 --> <util:property-path id="test" path="u_chinese.age"/> <!-- 加载指定资源文件 --> <util:properties id="confTest" location="classpath:message_zh_CN.properties"/> <!-- 定义一个list --> <util:list id="chin.schools" list-class="java.util.LinkedList"> <value>小学</value> <value>中学</value> <value>大学</value> </util:list> <!-- 定义一个set对象 --> <util:set id="chin.axes" set-class="java.util.HashSet"> <value>字符串斧子</value> <bean class="cn.sh.springmvc.model.SteelAxe"/> <ref local="stoneAxe"/> </util:set> <!-- 定一个 map对象 --> <util:map id="chin.scores" map-class="java.util.TreeMap" key-type="java.lang.String" value-type="java.lang.Double"> <entry key="数学" value="89"/> <entry key="英语" value="89"/> <entry key="语文" value="89"/> </util:map>
spring表达式 简称 SpEL
先把 表达式在bean中的使用给出来
<bean id="spel_chinese" class="cn.sh.springmvc.model.Chinese" p:name="#{T(java.lang.Math).random()}" p:age="#{new java.util.Random().nextInt(100)}" p:axe="#{new cn.sh.springmvc.model.SteelAxe('made in china')}"> <property name="books"> <list> <value>#{confTest.hello}</value> <value>#{confTest.now}</value> </list> </property> </bean>
//测试 SpEL 表达式语言 @Test public void test2() { ExpressionParser parser=new SpelExpressionParser(); Expression exp=parser.parseExpression("'Hello World'"); System.out.println("Hello World的结果"+exp.getValue()); exp=parser.parseExpression("'Hello World'.concat('!')"); System.out.println("concat后的结果"+exp.getValue()); exp=parser.parseExpression("'Hello World'.bytes"); System.out.println("调用getBytes方法后的结果"+exp.getValue()); exp=parser.parseExpression("'Hello World'.bytes.length"); System.out.println("方法返回值后的属性的结果"+exp.getValue()); exp=parser.parseExpression("new String('Hello World').toUpperCase()"); System.out.println("upperCase后的结果:"+exp.getValue(String.class)); exp=parser.parseExpression("age"); cn.sh.springmvc.model.Chinese c=act.getBean("u_chinese",cn.sh.springmvc.model.Chinese.class); System.out.println("以Chinese为root,age的表达式的值是:"+exp.getValue(c, Integer.class)); exp=parser.parseExpression("age==15"); StandardEvaluationContext ctx=new StandardEvaluationContext(); ctx.setRootObject(c); System.out.println(exp.getValue(ctx, Boolean.class)); List<Boolean> list=new ArrayList<Boolean>(); list.add(true); EvaluationContext ctx2=new StandardEvaluationContext(); ctx2.setVariable("list",list); parser.parseExpression("#list[0]").setValue(ctx2, "false"); System.out.println("List集合中的第一个元素:"+list.get(0)); cn.sh.springmvc.model.Chinese c1=act.getBean("spel_chinese",cn.sh.springmvc.model.Chinese.class); c1.test(); System.out.println(c1.getAxe().chop()); } @Test public void test3() { //直接变量表达式 ExpressionParser parser=new SpelExpressionParser(); String helloword=parser.parseExpression("'Hello World'").getValue(String.class); double num=parser.parseExpression("0.23").getValue(Double.class); //表达式中创建数组 Expression exp=parser.parseExpression("new String[]{'java','struts','spring'}"); System.out.println(exp.getValue()); exp=parser.parseExpression("new int[2][4]"); System.out.println(exp.getValue()); //创建list exp=parser.parseExpression("{'java','struts','spring'}"); System.out.println(exp.getValue()); //创建 二维 list exp=parser.parseExpression("{{'疯狂java讲义',''},{'左转','战国策'}}"); System.out.println(exp.getValue()); } @Test public void test4() { //访问 list,Map List<String> list=new ArrayList<String>(); list.add("Java"); list.add("Spring"); Map<String,Double> map=new HashMap<String,Double>(); map.put("Java", 80.0); map.put("Spring",89.0); ExpressionParser parser=new SpelExpressionParser(); EvaluationContext ctx=new StandardEvaluationContext(); ctx.setVariable("list", list); ctx.setVariable("map", map); System.out.println(parser.parseExpression("#list[0]").getValue(ctx)); System.out.println(parser.parseExpression("#map['java']").getValue(ctx)); } @Test public void test5() { ExpressionParser parser=new SpelExpressionParser(); EvaluationContext ctx=new StandardEvaluationContext(); System.out.println(parser.parseExpression("'helloworld'.substring(2,5)").getValue()); List<String> list=new ArrayList<String>(); list.add("Java"); list.add("Spring"); list.add("javascript"); list.add("ios"); list.add("hibernate"); list.add("android"); ctx.setVariable("myList", list); System.out.println(parser.parseExpression("#myList.subList(1,3)").getValue(ctx)); } //运算 @Test public void test6() { List<String> list=new ArrayList<String>(); list.add("Java"); list.add("Spring"); list.add("javascript"); list.add("ios"); list.add("hibernate"); list.add("android"); ExpressionParser parser=new SpelExpressionParser(); EvaluationContext ctx=new StandardEvaluationContext(); ctx.setVariable("myList", list); parser.parseExpression("#myList[0]='疯狂java讲义'").getValue(ctx); System.out.println(list.get(0)); System.out.println(parser.parseExpression("#myList.size() > 3 ? '长度大于3':'长度小于3'").getValue()); } //类型运算符 T() 如果类型 在 java.lang包下,T()可以省略 其他包不行 @Test public void test7() { ExpressionParser parser=new SpelExpressionParser(); System.out.println(parser.parseExpression("T(java.lang.Math).random()").getValue()); System.out.println(parser.parseExpression("T(System).getProperty('os.name')").getValue()); } //使用 new 创建对象 @Test public void test8() { ExpressionParser parser=new SpelExpressionParser(); System.out.println(parser.parseExpression("new String('Helloworld').substring(2,4)").getValue()); System.out.println(parser.parseExpression("new javax.swing.JFrame('测试').setVisible('true')").getValue()); //三目运算的使用 //下面两个 相等 System.out.println(parser.parseExpression("1 !=null ? 1:2").getValue()); System.out.println(parser.parseExpression("1?:2").getValue()); } //安全导航 ? @Test public void test9() { ExpressionParser parser=new SpelExpressionParser(); //这里没有采用 安全导航 会出现 NullPointerException System.out.println(parser.parseExpression("#foo.bar").getValue()); //这里采用了,不会出现 NullPointerException System.out.println(parser.parseExpression("#foo?.bar").getValue()); } //集合中元素 选择 @Test public void test10() { List<String> list=new ArrayList<String>(); list.add("Java"); list.add("Spring"); list.add("javascript"); list.add("ios"); list.add("hibernate"); list.add("android"); ExpressionParser parser=new SpelExpressionParser(); EvaluationContext ctx=new StandardEvaluationContext(); ctx.setVariable("myList", list); //集合中元素的值的长度大于 7 就寻找出来 System.out.println(parser.parseExpression("#myList.?[length()>7]") .getValue(ctx)); Map<String,Double> map=new HashMap<String,Double>(); map.put("Java", 89.9); map.put("hibernate", 60.9); map.put("javascript", 79.9); map.put("Spring", 50.9); ctx.setVariable("myMap", map); //map中元素的值 大于 80才被选择出来 System.out.println(parser.parseExpression("#myMap.?[value>80]").getValue(ctx)); } //集合投影 便利集合中的元素,然后进行指定的操作 @Test public void test11() { List<String> list=new ArrayList<String>(); list.add("Java"); list.add("Spring"); list.add("javascript"); list.add("ios"); list.add("hibernate"); list.add("android"); ExpressionParser parser=new SpelExpressionParser(); EvaluationContext ctx=new StandardEvaluationContext(); ctx.setVariable("myList", list); //得到的是 原集合中 元素的长度 System.out.println(parser.parseExpression("#myList.![length()]").getValue(ctx)); List<Chinese> list1=new ArrayList<Chinese>(); list1.add(new Chinese("java")); list1.add(new Chinese("Spring")); list1.add(new Chinese("javascript")); list1.add(new Chinese("ios")); list1.add(new Chinese("hibernate")); list1.add(new Chinese("android")); ctx.setVariable("myList1", list1); //获取的是原集合中元素的name属性 System.out.println(parser.parseExpression("#myList1.![name]").getValue(ctx)); } //表达式模版 @Test public void test12() { ExpressionParser parser=new SpelExpressionParser(); List<Chinese> list1=new ArrayList<Chinese>(); list1.add(new Chinese("java")); list1.add(new Chinese("Spring")); Expression exp=parser.parseExpression("我的名字是#{name}",new TemplateParserContext()); System.out.println(exp.getValue(list1.get(0))); }
发表评论
-
spring-session 中的坑
2017-07-06 15:34 9994spring-session 配置 依赖 gradle ... -
Spring AspectJ Aop Annotation
2017-03-29 17:08 708import org.aspectj.lang.Proce ... -
spring 第13天 使用@scheduled注解执行定时任务
2015-01-06 23:11 54085我们使用spring的注解 @Scheduled 执行定时任务 ... -
Spring 第12天,事务传播属性和 隔离级别
2014-09-28 00:36 8151 事务的传播属性(Propagation) 1) REQ ... -
spring 第11天 quartz任务调度
2014-08-24 13:59 1145Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
spring 第10 天 AOP 面向切面
2014-08-21 00:08 1751AOP(Aspect Orient Programming ... -
spring 第9天 Resurce 资源访问
2014-08-17 22:20 1868Spring Resource接口 spring提供的Reso ... -
spring 第8天 Spring 注解
2014-08-17 15:33 1472spring注解 @Component:标注一个普通的sp ... -
spring 第7天 Bean,BeanFactory处理器,配置器
2014-08-16 21:46 1237spring 两种后处理器 第一种,Bean 后处理器 对容器 ... -
spring 第5天不同作用域的bean,注入Field,方法返回值
2014-08-11 22:31 2113协调作用域不同步的bean 问题是;当一个singleton的 ... -
spring 第4天bean继承,init,destory-method
2014-08-10 17:54 1653深入理解Spring容器中的b ... -
spring 第3天使用java类和XML配置bean
2014-08-09 16:51 1505下面采用java类来配置bean,前面都采用xml进行配置be ... -
spring 第2天,bean作用域,自动注入集合
2014-08-06 22:16 1932sping容器中的Bean <!---beans的全 ... -
spring 第1天 IOC,DI,国际化,容器事件
2014-08-04 21:27 13951.构造注入(就是使用 构 ... -
SpringMVC 注解 和非注解
2014-01-26 10:29 18018首先看看非注解的项目结构 在web.xml文件 配置spr ... -
详解spring 每个jar的作用
2013-11-19 23:54 3910spring.jar 是包含有完整 ... -
Spring配置Hibernate事务
2013-11-10 13:45 1216为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事 ... -
Spring 中引用Properties文件
2013-08-29 14:39 10657其中部分配置信息(邮件发送相关): #邮件发送的相关配置 ... -
Spring IOC控制反转 依赖注入DI
2012-12-15 09:37 2330目录 1.使用IOC控制反转 中的DI依赖注入 手工注入 ... -
Spring IOC控制反转 依赖注入DI
2012-12-14 16:23 8目录 1.使用IOC控制反转 中的DI依赖注入 (两种配置方式 ...
相关推荐
**Spring SpEL表达式使用详解** Spring Expression Language (SpEL)是Spring框架中的一种强大而灵活的表达式语言,主要用于在运行时查询和操作对象图。它提供了在配置元数据中进行表达式评估的能力,使得我们可以...
**Spring SpEL(Spring Expression Language)表达式详解** Spring Expression Language,简称SpEL,是Spring框架中的一个强大表达式语言,用于在运行时查询和操作对象图。它提供了丰富的表达式语法,支持属性访问...
在本笔记中,我们将深入探讨Spring Security的命名空间,这是配置该框架的关键部分。通过理解这些命名空间,开发者可以更有效地控制应用程序的安全策略。 首先,Spring Security的核心配置是通过XML命名空间完成的...
SpringCloud Function SpEL 注入漏洞分析(CVE-2022-22963) SpringCloud Function 是 Spring 提供的一套分布式函数式编程组件,旨在帮助开发者专注于业务逻辑实现,而不需要关心服务器环境运维等问题。然而,在 ...
4. **Namespace和Element**:Spring的schema通常包含多个命名空间(namespace),每个命名空间代表一类功能,如`<beans>`、`<context>`、`<aop>`等。每个命名空间下有多个元素(element),如`<bean>`、`<property>`...
CVE-2022-22947 SpringCloud GateWay SpEL RCE CVE-2022-22947是一种影响SpringCloud GateWay的远程代码执行漏洞,通过SpEL(Spring Expression Language)实现RCE(Remote Code Execution)。下面是关于该漏洞的...
Spring Cloud Function 是基于Spring Boot 的函数计算框架,它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑。 批量检测脚本:python Spel_RCE_POC.py url.txt 反弹...
基于SpringBoot、Spring表达式语言 (SpEL)、annotation的操作日志 ### 简介 * 使用annotation来标注方法,标记操作内容 * 使用SpEL来动态生成操作日志内容,使操作日志记录更加详细(记录操作内容ID等关键信息) * ...
<bean id="car" class="com.gong.spring.beans.spel.Car" p:name="baoma" p:tyrePerimeter="#{T(java.lang.Math).PI*80}"> ``` 在上面的例子中,我们使用SpEL来计算tyrePerimeter的值,使用了Java的Math类中的PI常量...
Spring Boot自定义注解配合SPEL(Spring Expression Language)表达式可以让我们实现更为灵活的逻辑控制。本压缩包“spring-boot-annotation-spel.zip”显然是关于如何在自定义注解中运用SPEL表达式的实例教程。 ...
Spring组件开发模式支持SPEL表达式 Spring框架作为Java企业级应用程序的主流框架,提供了强大的组件开发模式,支持SPEL(Spring Expression Language)表达式,使得开发者能够更加灵活地使用表达式来实现业务逻辑。...
opt-log基于SpringBoot、Spring表达式语言 (SpEL)、annotation的操作日志简介使用annotation来标注方法,标记操作内容使用SpEL来动态生成操作日志内容,使操作日志记录更加详细(记录操作内容ID等关键信息)同一个...
### Spring 表达式语言 (SpEL) 中文参考手册概览 #### 一、Spring SpEL 概念与用途 Spring SpEL(Spring Expression Language)是一种强大的表达式语言,用于处理运行时查询和操作对象图。SpEL 的设计目标是提供一...
6. **lang** - 这可能包含一些辅助语言工具,如反射、类型转换和表达式语言(SpEL),SpEL是Spring的强大的表达式语言,用于在运行时查询和操作对象。 7. **aop** - 面向切面编程(AOP)模块,用于定义横切关注点,...
本篇将详细探讨Spring中的SpEL(Spring Expression Language)注入,这是一种强大的表达式语言,用于在运行时查询和操作对象图。 首先,SpEL提供了一种简洁的方式来访问和操作Bean的属性,它允许我们在配置中使用...
- **SpEL (Spring Expression Language)**:表达式语言,用于动态查询对象和对象属性,以及执行操作。 - **AOP**:支持面向切面编程。 - **Aspects**:AOP相关的依赖包。 - **DataAccess/Integration**:封装...
Spring Cloud Gateway 是一款基于Spring Framework和Spring Boot 2.x 的微服务网关,它提供了统一的路由、过滤器以及服务发现等功能,是构建云原生应用的重要组件。Actuator 是 Spring Boot 提供的一个模块,用于...
6. **lang**:Spring Lang模块提供了一些实用工具类,如反射、类型转换和表达式语言(SpEL),后者允许在运行时动态评估对象和属性。 7. **aop**:面向切面编程(AOP)模块让开发者可以定义横切关注点,如日志、...
本压缩包"Springtest.rar"显然是一个关于Spring框架IOC特性的实践练习,涵盖了多个关键概念,如属性注入、构造方法注入、集合属性处理、Bean的作用域以及表达式语言(SpEL)、P命名空间和C命名空间的使用。...