Spring EL表示式的运用@Value说明

Spring EL表达式语言,支持在XML和注解中表达式,类是于JSP的EL表达式语言。

在Spring开发中经常涉及调用各种资源的情况,包含普通文件、网址、配置文件、系统环境变量等,我们可以使用Spring的表达式语言实现资源的注入。

Spring主要在注解@value的参数中使用表达式。

本事咧演示一下情况:

注入普通字符串
注入操作系统属性
注入表达式运算结果
注入其他Bean的属性
注入文件内容
注入网址内容
注入属性文件(注意:用的是$符号)

配置文件test.properties:

book.author=wangyunfei
book.name=spring boot

测试文件test.text:

你好!Spring boot

注入类:

@Configuration // 声明当前类是一个配置类,相当于Spring配置的XML文件
// 包扫描,并排除了对BeanConfig的扫描
@ComponentScan(basePackages={"com.chenfeng.xiaolyuh"}, excludeFilters={@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value={BeanConfig.class, AopConfig.class})})
@PropertySource("classpath:test.properties")// 指定文件地址
public class ELConfig {
 @Value("注入普通字符串")// 注入普通字符串
 private String normal;

 @Value("#{systemProperties['os.name']}")// 注入操作系统属性
 private String osName;

 @Value("#{T(java.lang.Math).random() * 100.0 }")// 注入表达式结果
 private double randomNumber; 

 @Value("#{demoELService.another}")// 注入其他Bean属性
 private String fromAnother;

 @Value("classpath:test.txt")// 注入文件资源
 private Resource testFile;

 @Value("https://www.baidu.com")// 注入网址资源
 private Resource testUrl;

 @Value("${book.name}")// 注入配置文件【注意是$符号】
 private String bookName;

 @Autowired// Properties可以从Environment获得
 private Environment environment;

// @Bean
// public static PropertySourcesPlaceholderConfigurer propertyConfigure() {
// return new PropertySourcesPlaceholderConfigurer();
// }

 @Override
 public String toString() {
 try {
 return "ELConfig [normal=" + normal
  + ", osName=" + osName
  + ", randomNumber=" + randomNumber
  + ", fromAnother=" + fromAnother
  + ", testFile=" + IOUtils.toString(testFile.getInputStream())
  + ", testUrl=" + IOUtils.toString(testUrl.getInputStream())
  + ", bookName=" + bookName
  + ", environment=" + environment.getProperty("book.name") + "]";
 } catch (IOException e) {
 e.printStackTrace();
 return null;
 }
 }

}

测试类:

public class SpringELTest {
 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ELConfig.class);

 @Test
 public void contextTest() {
 ELConfig elConfig = context.getBean(ELConfig.class);
 System.out.println(elConfig.toString());
 }

 @After
 public void closeContext() {
 context.close();
 }

}

补充知识:yml、properties获取pom自定义变量

pom变量:

<profiles>
 <profile>
  <!-- 本地环境 -->
  <id>dev</id>
  <properties>
   <profiles.env>dev</profiles.env>
   <jdbc-url>jdbc:mysql://127.0.0.1:3306/melab?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</jdbc-url>
   <lcn-log-url>jdbc:mysql://127.0.0.1:3306/tx-manager?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</lcn-log-url>
   <jdbc-user>root</jdbc-user>
   <jdbc-password>123456</jdbc-password>
  </properties>
 </profile>
</profiles>

yml获取pom变量:

添加依赖:

<!-- https://mvnrepository.com/artifact/org.yaml/snakeyaml -->
<dependency>
 <groupId>org.yaml</groupId>
 <artifactId>snakeyaml</artifactId>
 <version>1.25</version>
</dependency>

获取变量:

url: @jdbc-url@
lcn-log-url: @jdbc-url@
username: @jdbc-user@
password: @jdbc-password@
properties获取pom变量:

build设置:

<build>
 <!--properties解析pom-->
 <pluginManagement>
  <plugins>
   <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
     <encoding>utf-8</encoding>
     <useDefaultDelimiters>true</useDefaultDelimiters>
    </configuration>
   </plugin>
  </plugins>
 </pluginManagement>
</build>

获取变量:

spring.datasource.url=${jdbc-url}
spring.datasource.username=${jdbc-user}
spring.datasource.password=${jdbc-password}

以上这篇Spring EL表示式的运用@Value说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Springboot中@Value的使用详解

    Springboot通过@Value注解将配置文件中的属性注入到容器内组件中(可用在@Controller.@Service.@Configuration.@Component等Spring托管的类中) 1.普通字符串注入 例:yml中存在key: name: zs @Value注入 @Value("${name}") public String name; 当yml中的name没有对应值时,即yml中为: name: 此时字符串name的值为"" 可设置注入属性的

  • 在SpringBoot 中从application.yml中获取自定义常量方式

    要注意的地方是 application.yml 中不能用驼峰式写法(systemParams)要改成system-params 方法一: 引入依赖: <!-- 支持 @ConfigurationProperties 注解 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</a

  • Spring4如何自定义@Value功能详解

    前言 本文主要给大家介绍了关于Spring4自定义@Value功能的相关内容,使用的Spring版本4.3.10.RELEASE,下面话不多说了,来一起看看详细的介绍吧. @Value在Spring中,功能非常强大,可以注入一个配置项,可以引用容器中的Bean(调用其方法),也可以做一些简单的运算 如下的一个简单demo,演示@Value的用法 import org.springframework.stereotype.Service; /** * 测试Bean */ @Service("use

  • Springboot @Value使用代码实例

    这篇文章主要介绍了Springboot @Value使用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 entity.Book package com.draymonder.amor.entity; import java.util.List; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.contex

  • Spring EL表示式的运用@Value说明

    Spring EL表达式语言,支持在XML和注解中表达式,类是于JSP的EL表达式语言. 在Spring开发中经常涉及调用各种资源的情况,包含普通文件.网址.配置文件.系统环境变量等,我们可以使用Spring的表达式语言实现资源的注入. Spring主要在注解@value的参数中使用表达式. 本事咧演示一下情况: 注入普通字符串 注入操作系统属性 注入表达式运算结果 注入其他Bean的属性 注入文件内容 注入网址内容 注入属性文件(注意:用的是$符号) 配置文件test.properties:

  • Spring mvc 分步式session的实例详解

    Spring mvc 分步式session的实例详解 Session代表服务器与浏览器的一次会话过程,它的信息是保存在服务器端的.在Servlet中,session指的是HttpSession类的对象.服务器在创建session后,会把sessionid以cookie的形式回写给客户端.只要客户端的浏览器不关,每一次访问服务器都会带上这个sessionid.这样就可以在每次请求的时候获取到session的信息. 下面以spring MVC以例来说明如果创建分步式session. 1.login

  • 剖析Spring WebFlux反应式编程设计及工作原理

    目录 前言 接口抽象 WebServer ReactiveWebServerFactory HttpHandler 启动流程分析 ReactiveWebServerApplicationContext 前言 Spring 5发布有两年了,随Spring 5一起发布了一个和Spring WebMvc同级的Spring WebFlux.这是一个支持反应式编程模型的新框架体系.反应式模型区别于传统的MVC最大的不同是异步的.事件驱动的.非阻塞的,这使得应用程序的并发性能会大大提高,单位时间能够处理更多

  • Spring MVC注解式开发使用详解

    MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @Controller: 当前类为处理器 @RequestMapping: 当前方法为处理器方法, 方法名随意, 对于请求进行处理与响应. @Controller public class MyController { @RequestMapping(value = "/hello.do") public ModelAndView

  • EL表达式的隐式对象_动力节点Java学院整理

    在使用EL时,其实EL是先看标识符是否是其隐式对象之一,如果不是,才从四个域(page.request.session.application)中顺序搜索(使用pageContext.findAttribute方法). EL总共有如下隐式对象: 而这里,EL和JSP一样拥有pageContext对象,通过在EL中使用pageContext对象,能获取JSP中其它几个隐式对象,然后再获得这些对象中的属性.例如获取当前web工程的名称的经典EL表达式:${ pageContext.request.c

  • Spring 整合Shiro 并扩展使用EL表达式的实例详解

    Shiro是一个轻量级的权限控制框架,应用非常广泛.本文的重点是介绍Spring整合Shiro,并通过扩展使用Spring的EL表达式,使@RequiresRoles等支持动态的参数.对Shiro的介绍则不在本文的讨论范围之内,读者如果有对shiro不是很了解的,可以通过其官方网站了解相应的信息.infoq上也有一篇文章对shiro介绍比较全面的,也是官方推荐的,其地址是https://www.infoq.com/articles/apache-shiro. Shiro整合Spring 首先需要

  • Spring AOP如何实现注解式的Mybatis多数据源切换详解

    一.为什么要使用多数据源切换? 多数据源切换是为了满足什么业务场景?正常情况下,一个微服务或者说一个WEB项目,在使用Mybatis作为数据库链接和操作框架的情况下通常只需要构建一个系统库,在该系统库创建业务表来满足需求,当然也有分为测试库和正式库dev/prod,不过这俩库的切换是使用配置文件进行切分的,在项目启动时或者打成maven JAR包指定environment-dev.properties或者environment-prod.properties. 那么当程序运行过程中,比如一个co

  • 一文带你搞懂Spring响应式编程

    目录 1. 前言 1.1 常用函数式编程 1.2 Stream操作 2. Java响应式编程 带有中间处理器的响应式流 3. Reactor 3.1 Flux & Mono 3.2 Flux Mono创建与使用 4. WebFlux Spring WebFlux示例 基于注解的WebFlux 基于函数式编程的WebFlux Flux与Mono的响应式编程延迟示例 总结 哈喽,大家好,我是指北君. 相信响应式编程经常会在各种地方被提到.本篇就为大家从函数式编程一直到Spring WeFlux做一次

  • 使用Spring Expression Language (SpEL)全面解析表达式

    目录 Spring Expression Language (SpEL) 1.环境准备 2.SpEL示例应用 3.小结 Spring表达式语言SpEL SpEL:字面量 SpEL:引用 Bean.属性和方法 SpEL支持的运算符号 示例-基于xml的方式 Spring Expression Language (SpEL) 是强大的表达式语言,支持查询.操作运行时对象图,以及解析逻辑.算术表达式.SpEL可以独立使用,无论你是否使用Spring框架. 本文尝试通过多个示例使用SpEL,探索其强大能

  • Spring 使用注解方式进行事务管理配置方式

    使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocatio

随机推荐