软件编程
位置:首页>> 软件编程>> java编程>> Spring EL表示式的运用@Value说明

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

作者:xiaolyuh123  发布时间:2023-03-05 02:33:19 

标签: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}

来源:https://blog.csdn.net/xiaolyuh123/article/details/61924447

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com