1 @Value("#{}")   SpEL表达式

@Value("#{}") 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量

  • @RestController
    @RequestMapping("/login")
    @Component
    public class LoginController {

    @Value("#{1}")
    private int number; //获取数字 1

    @Value("#{'Spring Expression Language'}") //获取字符串常量
    private String str;

    @Value("#{dataSource.url}") //获取bean的属性
    private String jdbcUrl;

    @Autowired
    private DataSourceTransactionManager transactionManager;

    @RequestMapping("login")
    public String login(String name,String password) throws FileNotFoundException{
    System.out.println(number);
    System.out.println(str);
    System.out.println(jdbcUrl);
    return "login";
    }
    }

当bean通过@Value(#{""}) 获取其他bean的属性,或者调用其他bean的方法时,只要该bean (Beab_A)能够访问到被调用的bean(Beab_B),即要么Beab_A 和Beab_B在同一个容器中,或者Beab_B所在容器是Beab_A所在容器的父容器。(拿我上面贴出来的代码为例在springMvc项目中,dataSource这个bean一般是在springContext.xml文件中申明的,而loginController这个bean一般是在springMvc.xml文件中申明的,虽然这两个bean loginController和dataSource不在一个容器,但是loginController所在容器继承了dataSource所在的容器,所以在loginController这个bean中通过@Value("#{dataSource.url}")能够获取到dataSource的url属性)。

2 @Value("${}")

通过@Value("${}") 可以获取对应属性文件中定义的属性值。假如我有一个sys.properties文件 里面规定了一组值: web.view.prefix =/WEB-INF/views/

在springMvc.xml文件中引入下面的代码既即以在 该容器内通过@Value("${web.view.prefix}")获取这个字符串。需要指出的是,如果只在springMvc.xml引入下面代码,只能在springMvc.xml文件中扫描或者注册的bean中才能通过@Value("${web.view.prefix}")获取这个字符串,其他未在springMvc.xml扫描和定义的bean必须在相应的xml文件中引入下面代码才能使用@Value("${}”)表达式

  • <!-- 加载配置属性文件 --
  • <context:property-placeholder
  • ignore-unresolvable="true" location="classpath:sys.properties" />

然后再controller文件中通过下面代码即可获取“”/WEB-INF/views/“”这个字符串

    • @Value("${web.view.prefix}")
    • private String prefix;

随机推荐

  1. Flask web开发之路十三

    g对象 ### 保存全局变量的g属性:g:global1. g对象是专门用来保存用户的数据的.2. g对象在一次请求中的所有的代码的地方,都是可以使用的. 项目结构: g_demo.py文件代码: f ...

  2. Python装饰器探险

    关于python装饰器的理解和用法,推荐廖雪峰老师和这一篇博客以及知乎 以下代码均已手动敲过,看完本篇内容,包你装饰器小成! 装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就 ...

  3. 虎牙直播运维负责人张观石 | SRE实践指南

    虎牙直播运维负责人张观石 本文是根据虎牙直播运维负责人张观石10月20日在msup携手魅族.Flyme.百度云主办的第十三期魅族开放日<虎牙直播平台SRE实践>演讲中的分享内容整理而成. ...

  4. Eonasdan bootstrap datetimepicker 使用记录

    开始用的 bootstrap日期选择控件是 bootstrap-datepicker : $('#visit_date').datepicker({ todayHighlight: true, sta ...

  5. TinyMind 多标签图像分类竞赛 之路

    竞赛传送门:https://www.tinymind.cn/competitions/42 我们就是傻狗天仙配啦~ 决赛排行榜: 这次比赛感谢第一名的 baseline:https://blog.cs ...

  6. bitcoinj学习记录

    一.密码学相关资料 使用Bouncy Castle生成数字签名.数字信封 ECDH and ECDSA(ECC椭圆曲线算法3) 数字签名算法RSA与 ECDSA的比较与分析 Java密码学 非对称加密 ...

  7. POJ 1063 - Flip and Shift

    Description This puzzle consists of a random sequence of m black disks and n white disks on an oval- ...

  8. [No0000155]为什么32位机器最大只能用到4GB内存

    在此之前先来了解一些计算机存储单位之间的关系以及计算机系统结构和PC硬件方面的一些知识. 一.计算机存储单位之间的关系 ,最小的存储单位. 个二进制位为一个字节(B),即1B = 8bit,最常用的单 ...

  9. Nginx配置跨域请求 Access-Control-Allow-Origin *

    当出现403跨域错误的时候 No 'Access-Control-Allow-Origin' header is present on the requested resource,需要给Nginx服 ...

  10. [dpdk] dpdk编译成动态库使用 -- PCI port自动发现与pmd动态加载

    1.  修改配置文件 .conf, 设置如下变量的值. [root@D129 x86_64-native-linuxapp-gcc]# cat dpdk/x86_64-native-linuxapp- ...