Spring EL表达式和资源调用
Spring EL表达式
Spring EL-Spring表达式语言,支持在xml和注解中使用表达式,类似于在jsp的EL表达式语言。
Spring 开发中经常涉及调用各种资源的情况,包含普通文件、网址、配置文件、系统环境变量等,我们可以使用Spring的表达式语言实现资源的注入。
Spring主要在注解@Value的参数中使用表达式语言。
- 注入普通字符
- 注入操作系统属性
- 注入表达式运算结果
- 注入其他Bean的属性
- 注入文件内容
- 注入网址内容
- 注入属性文件
示例
- 在类路径下新建一个text.txt文件,内容随意,在类路径下新建一个test.propertes文件,内容如下:
book.author=xxx
book.name= spring boot
- 编写一个需要注入的Bean
@Service
public class DemoService {
@Value("其他类中的属性") // 此处为注入普通字符串
private String another;
public String getAnother(){
return another;
}
public void setAnother(String anther){
this.another = anther;
}
}
- 配置类
@Configuration
@ComponentScan("xxx.xx.xx")
@PropertySource("classpath:test.properties")
public class ELConfig {
@Value("I Love You !") // 1
private String normal;
@Value("#{systemProperties['os.name']}") // 2
private String osName;
@Value("#{T(java.lang.Math).random() * 100.0}") // 3
private double randomNumber;
@Value("#{demoService.another}") // 4
private String fromAnother;
@Value("classpath:test.txt") // 5
private Resource testFile;
@Value("http://www.baidu.com") // 6
private Resource testUrl;
@Value("${book.name}")
private String bookName;
@Bean // 7
public static PropertySourcesPlaceholderConfigurer propertyConfigure(){
return new PropertySourcesPlaceholderConfigurer();
}
...
setter and getter function
...
}
代码解释
注入普通字符串
注入操作系统属性
注入表达式结果
注入其他Bean属性
注入文件资源,文件资源可以是classpath路径下的也可以是系统文件目录下的
注入网址资源
注入配置文件中的资源,配置文件使用@PropertySource注解在类上标注
注入配置件需要使用@PropertySource指定文件地址,若使用@Value注入,则要配置一个PropertySourcesPlaceholderConfigurer的Bean,@Value("${book.name}")使用的是"$"而不是"#"
Profile
Profile为不同环境下使用不同的配置提供了支持(开发环境和生成环境)
- 通过设定Environment的ActiveProfiles类设定当前context需要使用的配置。在开发中使用@Profile注解类或者方法,达到不同情况下选择实例化不同的Bean。
- 通过设定JVM的spring.profiles.active参数来设计配置环境。
- Web项目设置在Servlet的context parameter中。
<-- Servlet 2.5及以下 -->
<serlvet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>prod</param-value>
</init-param>
</servlet>
// servlet 3.0 以上
public class WebInit implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {
container.setInitParameter("spring.profiles.default", "dev");
}
}
示例
- 示例Bean
public class DemoBean {
private String content;
public DemoBean(String content){
this.content = content;
}
public String getContent(){
return content;
}
}
- Profile配置
@Configuration
public class ProfileConfig {
@Bean
@Profile("dev") // 1
public DemoBean devDemoBean(){
return new DemoBean("from development profile");
}
@Bean
@Profile("prod") // 2
public DemoBean prodDemoBean() {
return new DemoBean("from production profile");
}
}
代码解释
profile为dev时示例化devDemoBean
profile为prod时实例化为prodDemoBean
运行
public class Main{
public static void main(String[] args){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.getEnvironment().setActiveProfiles("prod"); // 1
context.register(ProfileConfig.class); // 2
context.refresh(); // 3
DemoBean demoBean = context.getBean(DemoBean.class);
System.out.println(demoBean.getContext());
context.close();
}
}
说明
- 先将活动的Profile设置为prod
- 后置注册Bean配置类,不然会报Bean未定义的错误
- 刷新容器
Spring EL表达式和资源调用的更多相关文章
- java MVEL2/Spring EL表达式、直接调用、反射性能实测
import java.io.Serializable; import java.lang.reflect.Field; import java.util.HashMap; import java.u ...
- 把功能强大的Spring EL表达式应用在.net平台
Spring EL 表达式是什么? Spring3中引入了Spring表达式语言—SpringEL,SpEL是一种强大,简洁的装配Bean的方式,他可以通过运行期间执行的表达式将值装配到我们的属性或构 ...
- Spring 在 xml配置文件 或 annotation 注解中 运用Spring EL表达式
Spring EL 一:在Spring xml 配置文件中运用 Spring EL Spring EL 采用 #{Sp Expression Language} 即 #{spring表达式} ...
- 使用spring EL表达式+自定义切面封装缓存模块
需求是这样的,业务代码需要使用到缓存功能以减少数据库压力,使用redis来实现,并且需要生成缓存的key由方法的传参拼接而成(貌似也只能这样才能保证同样的select查询可以使用缓存),简单的方式就是 ...
- 解决spring el表达式不起作用
el表达式不起作用,如下图所示 现象: 在显示页面中加入: <%@ page isELIgnored="false" %>就OK了 参考:http://bbs.csdn ...
- spring EL表达式,null-safe表达式
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://ww ...
- Spring整合Shiro并扩展使用EL表达式
Shiro是一个轻量级的权限控制框架,应用非常广泛.本文的重点是介绍Spring整合Shiro,并通过扩展使用Spring的EL表达式,使@RequiresRoles等支持动态的参数.对Shiro的介 ...
- Jsp内置对象及EL表达式的使用
一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...
- EL表达式的语法介绍及九大隐含对象
一. 简介 > JSP表达式 <%= %> 用于向页面中输出一个对象. > 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段. > 使用EL表达式来代 ...
随机推荐
- 【原创】RPM安装软件时解决依赖性问题(自动解决依赖型)
满足以下3个条件才能自动解决依赖性: 1.使用rpmdb -redhat(在安装时会自动弹出依赖性错误) 2.所有互相依赖的软件都必须在同一个目录下面. 3.调用-aid参数.
- POJ 1195 Mobile phones【 二维树状数组 】
题意:基础的二维数组,注意 0 + lowbit(0)会陷入无限循环----- 之前做一道一维的一直tle,就是因为这个-------------------------- #include<i ...
- SQL 自动记录存储过程,表,函数的创建修改和删除 -相当于SVN一样
在项目开发过程中,项目管理者通常都很希望对项目的开发进展有一个日志的记录.代码的记录和管理可以通过TFS或者VSS等工具去管理.但是数据库却没有记录开发日志这一功能.这在实际开发中很不方便, ...
- Python3基础笔记---序列化
1.json模块 菜鸟教程 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. import json json.dumps json ...
- scrapy框架学习
一.初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, 网 ...
- PHP XML To Array将XML转换为数组
// Xml 转 数组, 包括根键,忽略空元素和属性,尚有重大错误 function xml_to_array( $xml ) { $reg = "/<(\\w+)[^>]*?& ...
- luogu P1592 互质(欧拉函数)
题意 (n<=106,k<=108) 题解 一开始以为是搜索. 但想想不对,翻了一眼题解发现是欧拉函数. 因为 gcd(a,b)=gcd(a,a+b) 所以和n互质的数应该是类似a1,a2 ...
- Linux初学习
Linux Linux运行与关闭 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户.多任务.支持多线程和多 CPU 的操作系统. Linux ...
- Activity生命周期的运行流程
Activity的生命周期运行流程: ·当Activity第1次被启动: ·onCreate()->onStart()->onResume() ·当Activity被遮挡后再次 ...
- 多线程相互排斥--mutex
多线程之线程同步Mutex (功能与Critial Sections同样,可是属于内核对象,訪问速度较慢.能够被不同进程调用) 一 Mutex 相互排斥对象(mutex)内核对象可以确保线程拥 ...