1. 程式人生 > >Spring EL和資源調用

Spring EL和資源調用

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和資源調用