|
Spring常用配置-Spring EL和资源调用 先简单介绍下Spring EL。
Spring EL 也就是Spring表达式语言,支持在xml和注解中使用表达式,类似于JSP的EL表达式语言。
Spring开发中我们可能经常涉及到调用各种资源的情况,包含普通文件、网址、配置文件、系统环境变量等,我们可以使用Spring的表达式语言实现资源的注入。
Spring主要在注解@Value的参数中使用表达式。
本示例演示实现以下几种情况:
1、注入普通的字符串
2、注入操作系统属性
3、注入表达式运算结果
4、注入其他Bean的属性
5、注入文件内容
6、注入网址内容
7、注入属性文件
在本节演示中,我遇到一个问题,已在此博客中解决,如有朋友遇到,请参考本篇博客解决:
[url=http://blog.csdn.net/qq_26525215/article/details/53155760]【错误解决】[Maven] cannot be opened because it does not exist错误[文件无法编译到target目录下的解决方法][/url]
进行本示例的演示,需要先配置好Maven和Spring哦、
见:
【Spring】基于IntelliJ IDEA搭建Maven 示例 因为需要将file转换成字符串,我们增加commons-io可以简化文件的相关操作、
在pom文件中增加如下代码:
<!--简化文件操作-commons-io-->
< dependency>
< groupId>commons-io </ groupId>
< artifactId>commons-io </ artifactId>
< version>2.4 </ version>
</ dependency> |
然后,在当前类的目录下新建test.txt。内容随意。
我的内容如下:
测试文件内容 :Spring
然后再新建test.properties文件,内容如下,当然,你也可以自己修改:
project.name=SpringEL
project.author=chenhaoxiang |
写需要被注入的Bean:package cn.hncu.p2_2_2SpringEL;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
/**
* Created with IntelliJ IDEA.
* User: 陈浩翔.
* Date: 2016/11/13.
* Time: 下午 9:06.
* Explain:被注入的Bean
*/
@Service
public class DemoService {
@Value( "DemoService类的属性") //注入字符串
private String another;
public String getAnother() {
return another;
}
public void setAnother(String another) {
this.another = another;
}
} |
增加配置类: package cn.hncu.p2_2_2SpringEL;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;
import java.io.IOException;
/**
* Created with IntelliJ IDEA.
* User: 陈浩翔.
* Date: 2016/11/13.
* Time: 下午 9:11.
* Explain:配置类
*/
@Configuration
@ComponentScan( "cn.hncu.p2_2_2SpringEL")
@PropertySource( "classpath:cn/hncu/p2_2_2SpringEL/test.properties")
public class ElConfig {
@Value( "I LOVE YOU!") //注入字符串
private String normal;
@Value( "#{systemProperties['os.name']}") //获取操作系统名
private String osName;
@Value( "#{ T(java.lang.Math).random() * 100.0 }") //注入表达式结果
private double randomNumber;
@Value( "#{demoService.another}") //注入其他Bean的属性
private String fromAnother;
@Value( "${project.name}") //注入配置文件
private String projectName;
@Value( "classpath:cn/hncu/p2_2_2SpringEL/test.txt")
private Resource testFile; //注意这个Resource是:org.springframework.core.io.Resource;
@Autowired //注入配置文件
private Environment environment;
@Value( "http://www.chaojijuhui.com") //注入网址资源
private Resource testUrl;
@Bean //注入配置文件
public static PropertySourcesPlaceholderConfigurer propertyConfigurer(){
return new PropertySourcesPlaceholderConfigurer();
}
public void outputResource(){
try {
System.out.println( "normal:"+normal);
System.out.println( "osName:"+osName);
System.out.println( "randomNumber:"+randomNumber);
System.out.println( "fromAnother:"+fromAnother);
System.out.println( "projectName:"+projectName);
System.out.println( "测试文件:"+IOUtils.toString(testFile.getInputStream()));
System.out.println( "配置文件project.author:"+environment.getProperty( "project.author"));
System.out.println( "网址资源:"+IOUtils.toString(testUrl.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
} |
注入配置配件需要使用@PropertySource指定文件地址,若使用@Value注入,则要配置一个PropertySourcesPlaceholderConfigurer的Bean。
注意,@Value(“${project.name}”)使用的是” $“而不是”#”。
上面的类演示了这2中配置配件的方式! 运行类: package cn.hncu.p2_2_2SpringEL;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created with IntelliJ IDEA.
* User: 陈浩翔.
* Date: 2016/11/13.
* Time: 下午 11:44.
* Explain:运行类
*/
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ElConfig.class);
ElConfig resourceService = context.getBean(ElConfig.class);
resourceService.outputResource();
context.close();
}
} |
运行结果: 项目链接—具体包:
https://github.com/chenhaoxiang/Java/tree/master/springBoot/src/main/java/cn/hncu/p2_2_2SpringEL
----------------------------
原文链接:https://blog.csdn.net/qq_26525215/article/details/53156288
程序猿的技术大观园:www.javathinker.net
[这个贴子最后由 flybird 在 2020-03-04 10:17:27 重新编辑]
|
|