>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring》、《Spring Cloud Alibaba微服务开发零基础入门到实操》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 27013 个阅读者 刷新本主题
 * 贴子主题:  【Spring】Spring常用配置-Spring EL和资源调用 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2019-08-19 16:21:28     消息  查看  搜索  好友  邮件  复制  引用

            

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 重新编辑]
  Java面向对象编程-->数组
  JavaWeb开发-->访问数据库(Ⅰ)
  JSP与Hibernate开发-->映射对象标识符
  Java网络编程-->基于MVC和RMI的分布式应用
  精通Spring-->
  Vue3开发-->Vue简介
  Spring Boot 入门,用 Spring Boot 写第一个 HelloWorld 程序
  Netty的粘包和拆包问题分析
  阿里巴巴为什么能抗住90秒100亿?看完这篇你就明白了!
  HandlerInterceptor与WebRequestInterceptor的异同
  @InitBinder注解的用法
  Spring MVC处理静态资源文件的方式
  Spring数据验证 中@NotNull, @NotEmpty和@NotBlank之间的区别
  探讨通过Feign配合Hystrix进行调用时异常的处理
  RESTful架构和RESTful API设计总结
  RabbitMQ的用途、原理以及配置
  Dubbo源码解析之SPI:扩展类的加载过程
  kubernetes 中的资源
  Spring5新特性之日志体系
  Spring @Transactional注解失效解决方案
  Axis、Axis2和CXF比较
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。