spring EL 实现ref的效果

之前学习basic的时候有个疑问就是不知道如何实现bean中引用其他的bean的属性,当时是用ref来实现对其他bean的引用,但是ref必需引用的是一个常量。所以这种方式来实现对其他bean中的属性的引用是不合理的。

当我看到Spring Expression Language时发现原来我想实现的'ref'的效果就是使用Spring EL这种表达式就可以完成了。

 

而Spring EL有两种配置形式,一种是Spring EL 写在xml中,和zai xml定义bean一样,通过在定义bean的xml标签内使用"#{otherBean.property}" 或#{otherBean}的形式来完成。另一种是基于注解的方式。一下稍作说明:

第一种和第二种都是通过xml来加载spring context的但是xml里的内容不一样

第一种:直接在xml中定义spring 的上下文,并在bean中的属性字段直接使用SpringEL来引用其他bean或其他bean的属性

第二种: 在xml中定义Component的scan-package的包名,这样spring会在这个包中扫描并配置对应的bean,然后我们在对应的类中加上注解就可以了.

 

第一种:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="itemBean" class="com.ric.demo.Item">
<property name="name" value="itemA"/>
<property name="qty" value="10"/>
</bean>

<bean id="customerBean"
class="com.ric.demo.Customer">
<property name="item" value="#{itemBean}" />// 直接在这里使用Spring EL设置值
        <property name="itemName" value="#{itemBean.name}"/>// 直接在这里使用Spring EL设置值
</bean>
</beans>

第二种

定义xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">

<context:component-scan base-package="com.ric.demo" />

</beans>
配置对应的bean
@Component("customerBean")
public class Customer {

private Item item;
private String itemName;

@Override
public String toString() {
return "Customer{" +
"item=" + item +
", itemName='" + itemName + '\'' +
'}';
}

public Item getItem() {
return item;
}
// 使用Spring EL 来取到对应的value

@Value("#{itemBean}")
    public void setItem(Item item) {
this.item = item;
}

public String getItemName() {
return itemName;
}
// 使用Spring EL 来取到对应的value
@Value("#{itemBean.name}")
public void setItemName(String itemName) {
this.itemName = itemName;
}
}

 需要注意的是如果这里的 Spring EL里面引用的是其他的对象有一下这种效果

 

ApplicationContext context = new ClassPathXmlApplicationContext("BeansAutoScan.xml");

Item item = (Item)context.getBean("itemBean");
System.out.println(item);

Customer customer = (Customer)context.getBean("customerBean");
System.out.println(customer);

item.setName("geek");

System.out.println(item);
System.out.println(customer);

Item{name='item', qty=10}
Customer{item=Item{name='item', qty=10}, itemName='item'}
Item{name='geek', qty=10}
Customer{item=Item{name='geek', qty=10}, itemName='item'}

Process finished with exit code 0

也就是说如果引用的是item bean 我们的customer的itemBean属性的确是对item这个bean的一个引用。

但是Customer的itemName这个属性的值没有变,因为bean扫描的时候也是为上下文中的bean做一个初始化的工作,初始化完后item虽然对name做了一个更新的操作,但是customer的itemName的指针不会因为item的name做了变化而同步,而是依旧指向item原先name值的那个指针

 

 

 

 

 

 

 

 

 

 

 

 

 

        

转载于:https://www.cnblogs.com/codetime/p/6293489.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021手机CIS技术趋势总结

手机摄像头CIS&#xff08;CMOS图像传感器&#xff09;自从突破1亿像素以后&#xff0c;再谈像素数量增大&#xff0c;似乎已经很难让市场产生激烈反应了。这两年电子工程专辑对于手机摄像头CIS&#xff0c;以及更多领域不同类型的图像/视觉传感器&#xff08;如ToF、基于事件的…

关于Unity中NGUI的背包实现之Scrollview(基于Camera)

基于UIPanel的scrollview实现方式在移动设备上的性能不如基于camera的方式。因为UIPanel的scrollview实现方式要渲染很多的道具图&#xff0c;性能自然就降低了。如果是用第二个摄像机camera的方式&#xff0c;物体并没有动&#xff0c;只是拖动第二个摄像机摄像机&#xff0c;…

YUV422/420 format

(在本文中&#xff0c;U 一词相当于 Cb&#xff0c;V 一词相当于 Cr。) YUV422 format as shown below 4:2:2 表示 2:1 的水平取样&#xff0c;没有垂直下采样 YUV420 format as shown below4:2:0 表示 2:1 的水平取样&#xff0c;2:1 的垂直下采样. YUV4:2:0并不是说只有U&…

vue部署问题

history模式配置后刷新404的解决办法! 第一种 nginx配置 在usr/local/nginx/conf/vhost 下 域名.conf配置文件修改或添加 第一种方案server {##在server下添加或在location里面添加以下代码location / {if (!-e $request_filename) {rewrite ^(.*)$ /index.html?s$1 last…

位域

有些信息在存储时&#xff0c;并不需要占用一个完整的字节&#xff0c; 而只需占几个或一个二进制位。例如在存放一个开关量时&#xff0c;只有0和1 两种状态&#xff0c; 用一位二进位即可。为了节省存储空间&#xff0c;并使处理简便&#xff0c;C语言又提供了一种数据结构&a…

数字后端——ECO

目录 一、概述 二、ECO分类 1、按时间节点 1&#xff09;流片前的ECO 2&#xff09;流片过程的ECO 3&#xff09;流片后的ECO 2、按网表是否改变 1&#xff09;功能ECO 2&#xff09;时序ECO 三、ECO处理内容 1、设计规则违例 1&#xff09;提升标准单元驱动力 2…

Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?

Uncaught TypeError: Cannot read property length of null 错误怎么处理&#xff1f; 1.可能是返回的datagrid数据格式有问题&#xff0c;比如{"total":0,"rows":null}&#xff0c;改为{"total":0,"rows":"[]"}就可以了 if…

电视百科常识 九大视频接口全接触

1 射频 天线和模拟闭路连接电视机就是采用射频&#xff08;RF&#xff09;接口。作为最常见的视频连接方式&#xff0c;它可同时传输模拟视频以及音频信号。RF接口传输的是视频和音频混合编码后的信号&#xff0c;显示设备的电路将混合编码信号进行一系列分离、解码在输出成像。…

tracert路由检测命令使用方法

很多客户网站无法访问的时候都会第一时间怀疑是虚拟主机有问题了&#xff0c;其实大多时候网站无法访问和很多因素相关&#xff0c;包括自己的网络、计算机设置、省际路由等等&#xff1b; 那么这里我就简单讲下如何利用DOS下的命令检测你的计算机到服务器之间的路由是否通畅&a…

数字后端——物理单元介绍

物理单元&#xff08; physical cell&#xff09;指没有逻辑功能但是具有物理实现功能的标准单元&#xff0c; 用于抑制芯片生产过程中的各类物理效应&#xff0c; 保证芯片生产后能够正常工作 。硬核位置确 定后&#xff0c;需要插入物理单元消除影响芯片工作的物 效应&#x…

vue双向数据绑定的原理

有关双向数据绑定的原理 最近两次面试的时候&#xff0c;被问到了vue中双向数据绑定的原理&#xff0c;因为初学不精&#xff0c;只是使用而没有深入研究&#xff0c;所以答不出来。之后就在网上查找了别人写的博客&#xff0c;学习一下。 下面是博客园一篇博客&#xff0c;以及…

求职网站总结

最近忙着要找份工作。毕业半年多就辞职&#xff0c;也是尴尬。 这里记录一些求职网站和找工作的一些经验。主要参考了三个知乎问题&#xff1a;怎么在互联网上找工作&#xff1f;&#xff0c;招聘网站&#xff0c;哪个靠谱&#xff1f;和哪个求职网站&#xff08;app&#xff0…

FTP命令解析

FTP命令详解FTP命令是Internet用户使用最频繁的命令之一&#xff0c;不论是在DOS还是UNIX操作系统下使用FTP&#xff0c;都会遇到大量的FTP内部命令。熟悉并灵活应用FTP的内部命令&#xff0c;可以大大方便使用者&#xff0c;并收到事半功倍之效。   FTP的命令行格式为&…

深入Java内存模型

你可以在网上找到一大堆资料让你了解JMM是什么东西&#xff0c;但大多在你看完后仍然会有很多疑问。happen-before是怎么工作的呢&#xff1f;用volatile会导致缓存的丢弃吗&#xff1f;为什么我们从一开始就需要内存模型&#xff1f; 通过这篇文章&#xff0c;读者可以学习到足…

Matlab 使用GPU加速 转载

在matlab中使用GPU加速&#xff0c;来加速矩阵运算。 首先如前面所说&#xff0c;并不是所有GPU都能在maltab中进行加速的&#xff0c;貌似只有NVDIA的显卡可以吧。 硬件&#xff1a;GeForce GTX 980 软件&#xff1a;Matlab 2015a &#xff08;Matlab 2012以后的版本才带有GP…

数字后端——可制造性设计

随着集成电路制造工艺技术的迅速发展&#xff0c;集成电路集成度迅速攀升&#xff0c;制造流程及工艺步骤日趋复杂&#xff0c;工艺尺寸也在不断缩小。集成电路可制造性设计&#xff08;Design For Manufacturability,DFM&#xff09; 以直接提升集成电路芯片的良品率及降低芯片…

Cloudstack安装(二)

Cloudstack安装 官方文档参考&#xff1a; http://docs.cloudstack.apache.org/projects/cloudstack-installation/en/4.9/qig.html#environment Cloudstack主要分Management和Agent两部分。 系统版本&#xff1a;CentOS 6.8 Management&#xff1a; cpu1&#xff0c;ram 2048M…

Pycharm 输出中文或打印中文乱码现象的解决办法

转载地址&#xff1a;https://www.cnblogs.com/Bro-Young/p/5920884.html 1. 确保文件开头加上以下代码&#xff1a; 1 # -*- coding:utf-8 -*- 还可以加上 1 import sys 2 reload(sys) 3 sys.setdefaultencoding(utf-8) 确保以下。 如果还是没有解决中文乱码&#xff0c;那么进…

计算机系统结构——概述

计算机的实现包括两个方面&#xff1a;组成和硬件。组成一词包含了计算机设计的高阶内容&#xff0c;例如存储器系统&#xff0c;存储器互连&#xff0c;设计内部处理器 CPU &#xff08;中央处理器——算术、逻辑、分支和数据传送功能都在内部实现&#xff09;。有时也用微体系…

BestCoder Round #91 1001 Lotus and Characters

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid6011 题意&#xff1a; Lotus有nn种字母&#xff0c;给出每种字母的价值以及每种字母的个数限制&#xff0c;她想构造一个任意长度的串。 定义串的价值为&#xff1a;第1位字母的价值*1第2位字母的价值*2第3位字…