Spring Bean定义中表达式语言的支持

Stella981
• 阅读 686

    SpEL(Spring Expression Language,Spring表达式语言)的一个重要的作用就是扩展Spring容器的功能,允许在Bean定义中使用SpEL。XML配置文件和Annotation中都可以使用SpEL。在XML和Annotation中使用SpEL时,都需要使用#{ expression }的格式来包装表达式。

    例如有如下的Author类:

public class Author {
    private String name;
    private List<String> books;
    private Object obj;
    //省略getter 和 setter
}

    这个Author类需要注入name和books属性。当然,可以按照以前的方式进行配置,但如果使用SpEL,将可以对Spring配置文件进一步简化:

    因为本例要用到Spring的p命名空间和util命名空间,故先在applicationContext.xml文件的元素中增加以下内容:

xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd

    然后配置Bean:

<!-- 使用util.priperties加载指定的资源文件 -->
<util:properties id="config" location="classpath:config_zh_CN.properties" />
<bean id="author" class="com.abc.Author">
    <!-- 在表达式中调用方法 -->
    p:name="#{'abcdef'.subString(0,3)}"
    p:obj="#{new java.lang.Object()}"
    <property name="books">
        <list>
            <!-- 在表达式中访问其他Bean的属性 -->
            <value>#{config.book1}</value>
            <value>#{config.book2}</value>
            <value>#{config.book3}</value>
        </list>
    </property>
</bean>

    上面的代码就是利用SpEL进行配置的,使用SpEL可以在配置文件中调用方法、创建对象(这种方式可以代替嵌套Bean语法),访问其他Bean的属性等等。总之,SpEL支持的语法都可以在这里使用,SpEL极大的简化了Spring配置。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
spring注解
随着越来越多地使用Springboot敏捷开发,更多地使用注解配置Spring,而不是Spring的applicationContext.xml文件。Configuration注解:Spring解析为配置类,相当于spring配置文件Bean注解:容器注册Bean组件,默认id为方法名@Configurat
Stella981 Stella981
3年前
Spring 学习笔记(三):Spring Bean
1Bean配置Spring可以看做是一个管理Bean的工厂,开发者需要将Bean配置在XML或者Properties配置文件中。实际开发中常使用XML的格式,其中<bean中的属性或子元素如下:id:Bean在BeanFactory中的唯一标识,在代码中通过BeanFac
Wesley13 Wesley13
3年前
Java——基于AspectJ的AOP开发
1.AspectJ简介AspectJ是一个基于Java语言的AOP框架。Spring2.0以后新增了对AdpectJ切点表达式的支持。@AspectJ是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面。新版本Spring框架,建议使用AspectJ方式来开发AOP。使用AspectJ需要导
Easter79 Easter79
3年前
Spring容器中Bean的作用域
当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域:singleton:单例模式,在整个SpringIoC容器中,使用singleton定义的Bean将只有一个实例prototype:原型模式,每次通过容器
Stella981 Stella981
3年前
Spring 4.3 的新功能和增强
核心容器改进核心容器额外提供了更丰富的元数据来改进编程。默认Java8的方法检测为bean属性的getter/setter方法。如果目标bean只定义了一个构造函数,则它无需要指定@Autowired注解@Configuration类支持构造函数注入。任何SpEL
Easter79 Easter79
3年前
Spring高级应用之注入嵌套Bean
在Spring中,如果某个Bean所依赖的Bean不想被Spring容器直接访问,可以使用嵌套Bean。和普通的Bean一样,使用<bean元素来定义嵌套的Bean,嵌套Bean只对它的外部的Bean有效,Spring容器无法直接访问嵌套的Bean,因此定义嵌套Bean也无需指定id属性。如下配置片段是一个嵌套Bean的示例:<bean id
Easter79 Easter79
3年前
Spring表达式语言:SpEL
1、Spring表达式语言(简称:SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。2、语法类似于EL:SpEL使用{...}作为定界符,所有在大括号内的字符都被认为是SpEL。3、SpEL为bean的属性进行动态赋值提供了便利。4、通过SpEL可以实现:\通过bean的id对bean进行引用\调用方法以及引用对象
带着问题去分析:Spring Bean 生命周期 | 京东物流技术团队
1:Bean在Spring容器中是如何存储和定义的Bean在Spring中的定义是org.springframework.beans.factory.config.BeanDefinition接口,BeanDefinition里面存储的就是我们编写的Jav