Spring EL和資源調用
阿新 • • 發佈:2017-09-20
style exception bsp stack hold per one png import
Spring EL-Spring表達式語言,支持在xml和註解中使用表達式,類似於jsp的EL表達式。我們在開發過程中,經常會涉及到調用各種資源,包含普通文本、網址、配置文件、系統環境變量等,我們可以使用Spring的表達式語言來實現資源的註入。
Spring主要在註解@Value的參數中使用表達式:
(1)註入普通字符
(2)註入操作系統屬性
(3)註入表達式運算結果
(4)註入其他Bean的屬性
(5)註入文件內容
(6)註入網址內容
(7)註入屬性文件
示例代碼如下:
1、準備,增加commons-io可簡化文件相關操作,本例中使用commons-io將file轉換成字符串
<!--通過commons-io來簡化文件相關操作--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.3</version> </dependency>
2、在com.lwh.highlight_spring4.ch2.el包下新建test.properties,內容如下:
book.author=luwenhu
book.name=spring boot
3、需要被註入的bean
package com.lwh.highlight_spring4.ch2.el; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; /** * Created by luwenhu on 2017/9/19.*/ @Service public class DemoService { //在這裏註入普通字符串 @Value("其他類的屬性") private String another; public String getAnother() { return another; } public void setAnother(String another) { this.another = another; } }
4、演示配置類
package com.lwh.highlight_spring4.ch2.el;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; /** * Created by luwenhu on 2017/9/19. */ @Configuration @ComponentScan("com.lwh.highlight_spring4.ch2.el") //指定屬性文件的全路徑 //classpath:其實就是打包之後的classes下 @PropertySource("classpath:com/lwh/highlight_spring4/ch2/el/test.properties") public class ElConfig { @Value("zju")//(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)註入其他bean的屬性 private String fromAnother; @Value("classpath:com/lwh/highlight_spring4/ch2/el/test.txt")//(5)註入文件資源 private Resource testFile; @Value("http://www.baidu.com")//(6)註入網站資源 private Resource testUrl; @Value("${book.name}")//(7)註入配置文件,註意使用的是$而不是# private String bookName; /** * 關於@Autowired和@Bean * @Autowired:可註解在set方法和屬性上,用來註入bean,習慣上註解在屬性上,它是屬於註解配置 * @Bean:註解在方法上,聲明當前方法的返回值為一個Bean,它是屬於java配置 */ @Autowired private Environment environment;//註入Properties還可以從Environment中獲得 //註入配置配件需要使用@PropertySoure指定文件地址,若使用@Value註入,則要配置一個 //PropertySourcesPlaceholderConfigurer的bean @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigure(){ return new PropertySourcesPlaceholderConfigurer(); } public void outputResource(){ try{ System.out.println(normal); System.out.println(osName); System.out.println(randomNumber); System.out.println(fromAnother); System.out.println(IOUtils.toString(testFile.getInputStream())); System.out.println(IOUtils.toString(testUrl.getInputStream())); System.out.println(bookName); System.out.println(environment.getProperty("book.author")); }catch (Exception e){ e.printStackTrace(); } } }
5、運行
package com.lwh.highlight_spring4.ch2.el; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * Created by luwenhu on 2017/9/19. */ 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(); } }
6、運行結果展示
註意:
如果你的程序run之後報找不到com.lwh.highlight_spring4.ch2.el下面的file的原因是,你的D:\highlight_spring4\target\classes\com\lwh\highlight_spring4\ch2\el目錄下面沒有test.properties或者test.txt文件。因為classpath是指編譯後classes下的路徑!!!!!
Spring EL和資源調用