在Spring框架中,SpEL(Spring Expression Language)提供了一种强大且灵活的方式来查询和操作对象图。Spring Bean定义支持使用SpEL来配置属性和依赖关系,允许开发者通过表达式语言来设置属性值或者调用方法。 ### SpEL表达式语言基础 SpEL是一种表达式语言,可以在运行时构建复杂表达式、存取对象属性、调用方法、访问数组、集合和索引器的内容,甚至可以调用静态方法或常量。 ### Spring配置文件中的SpEL使用 在Spring配置文件中使用SpEL非常简单。在XML配置文件中,通过`#{}`来指定SpEL表达式。例如,`#{expression}`中`expression`就是一个SpEL表达式。 ### 示例解析 我们通过一个具体的实例来讲解Spring配置文件中SpEL的具体使用。 #### 配置文件解析 配置文件通过命名空间`xmlns:p`和`xmlns:util`来引入了对应的属性和工具命名空间,以便支持SpEL表达式和加载属性文件。 ```xml <beans xmlns="***" xmlns:xsi="***" xmlns:p="***" xmlns:util="***" xsi:schemaLocation="*** *** *** ***"> ``` 接下来,使用`util:properties`标签加载外部属性文件,此处属性文件位于classpath下,文件名为`test_zh_CN.properties`。 ```xml ``` 在`<bean>`标签中,使用`p:`前缀来引用属性,通过SpEL表达式设置属性值。 ```xml <bean id="author" class="org.crazyit.app.service.impl.Author" p:name="#{T(java.lang.Math).random()}" p:axe="#{new org.crazyit.app.service.impl.SteelAxe()}" p:books="#{{confTest.a, confTest.b}}"/> ``` 在上述配置中,`p:name`属性通过调用`java.lang.Math`的`random()`方法来随机设置`author`的`name`属性值。`p:axe`属性通过SpEL表达式`#{new org.crazyit.app.service.impl.SteelAxe()}`创建了一个新的`SteelAxe`对象。`p:books`属性通过`#{...}`表达式访问了`confTest` Bean中`a`和`b`属性的值,并将其作为`books`的值。 #### 配置文件中的资源文件 资源文件`test_zh_CN.properties`包含了键`a`和`b`,它们对应的值可能会被`p:books`引用。 #### 接口与Bean定义 接口`Axe`定义了`chop()`方法,`Person`接口定义了`useAxe()`、`getBooks()`以及`getName()`方法。`Author`类实现了`Person`接口,并提供了相应的getter和setter方法。 通过使用SpEL,Spring能够动态地在运行时解析这些表达式,这样就能够在配置文件中实现更复杂的依赖注入。比如,使用表达式动态调用方法来设置Bean属性,或者通过表达式直接实例化对象。 ### SpEL表达式操作技巧 - SpEL表达式可嵌套使用,能够组成复杂的表达式,访问对象属性或方法。 - SpEL支持三元运算符、算术运算符、关系运算符、逻辑运算符等,可以进行条件判断和逻辑运算。 - 使用SpEL可以访问Spring容器的功能,例如通过表达式引用其他Bean。 - SpEL支持正则表达式的匹配操作。 - SpEL提供强大的类型转换功能。 - 可以在SpEL中访问静态方法和静态属性。 - SpEL的运算操作符支持自定义的类型,只要这些类型提供了合适的运算符实现。 ### 实现技巧总结 使用SpEL可以极大地提高配置文件的灵活性和动态性,尤其是在复杂的业务逻辑和配置较多的情况下。理解并熟练使用SpEL,对于管理和维护Spring应用至关重要。 1. 了解SpEL支持的运算符和函数。 2. 学习如何在SpEL中调用Bean的方法,访问Bean的属性。 3. 理解SpEL表达式中的类型转换机制。 4. 在必要时使用` spelCompilerMode`提高SpEL表达式的执行效率。 5. 注意安全,确保SpEL表达式中不包含不安全的代码执行,防范注入攻击。 总结来说,Spring框架的SpEL是支持Spring Bean定义的一个强大工具,它允许开发者在XML配置文件或注解中使用表达式语言来操作数据和逻辑。通过上述示例,我们可以看到在实际的Spring应用中如何利用SpEL进行灵活配置。通过深入理解SpEL,可以更加高效和安全地开发和维护Spring应用。
2026-01-01 11:38:51 48KB Spring Bean SpEL
1
1. 前言 在使用redis集群时,发现过期key始终监听不到。网上也没有现成的解决方案。于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。以上做法可能不尽人意,目前也没找到好的解决方案,如果有好的想法,请留言告知哦!不多说,直接贴我自己的代码! 2. 代码实现 关于Redis集群配置代码此处不贴,直接贴配置监听类代码! redis.host1: 10.113.56.68 redis.port1: 7030 redis.host2: 10.113.56.68 redis.port2: 7031 redis.host3: 10.113.56.6
2025-07-26 10:58:20 69KB bean
1
最新Android SDK (4.1): 下载安装顺序: 首先下载安装 【Android 4.1 SDK Tools 20.0.1】 http://download.csdn.net/detail/joe9i0/4462908 然后下载以下包解压到SDK Tools的安装目录 【ARM EABI v7a System Image】 文件超过上传限制,分割为2个部分, 下载后使用7zip解压. ① http://download.csdn.net/detail/joe9i0/4488695 ② http://download.csdn.net/detail/joe9i0/4488705 【SDK Platform】 http://download.csdn.net/detail/joe9i0/4462924 【Google USB Driver】 http://download.csdn.net/detail/joe9i0/4488675 【Android SDK Platform-tools】 http://download.csdn.net/detail/joe9i0/4463093 【Documention for Android SDK】 文件超过上传限制,分割为2个部分, 下载后使用7zip解压. ① http://download.csdn.net/detail/joe9i0/4463138 ② http://download.csdn.net/detail/joe9i0/4463158 【Samples for SDK】 http://download.csdn.net/detail/joe9i0/4463213 【Google APIs】 http://download.csdn.net/detail/joe9i0/4463222 【Sources for Android SDK】 http://download.csdn.net/detail/joe9i0/4488670
2023-12-24 12:52:22 67.22MB Android SDK Tools 20.0.1
1
该资源主要参考我的博客 Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作完成,http://blog.csdn.net/eastmount/article/details/45833663 主要讲述通过DAO和Java Bean实现对数据库的操作,并显示学生的信息在JSP网站中,希望基础免费资源对初学者有所帮助,同时建议结合博客使用,如果有错误或不足之处,请海涵~ Eastmount
2023-11-22 07:03:00 742KB Java 网站开发 数据库操作 JavaBean
1
按照参数,且可配模板,自动生成bean文件,包括mysql的注释
2023-10-09 07:02:29 1.7MB java 自动 生成 bean
1
bean copy。
2023-02-10 18:43:58 4KB bean  copy
1
自己手写的,在项目中也是经常使用的工具。常用的json转化为javabean,javabean转化成json通用工具
2023-01-08 20:02:47 3KB JSON和B
1
使用Annotation和反射实现Bean转SQL语句Demo
2022-12-09 18:57:05 9KB Java Bean SQL Annotation
1
sisu-inject-bean-1.4.2.jar
2022-09-30 15:33:52 149KB sisu-inject-bean
1
主要介绍了如何正确控制springboot中bean的加载顺序总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
1