java共享数据问题:两bean里都有变量引用了同一共bean,共bean里有map,想这两个bean可以共同访问这个map

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java共享数据问题:两bean里都有变量引用了同一共bean,共bean里有map,想这两个bean可以共同访问这个map相关的知识,希望对你有一定的参考价值。

java-spring下开发web,想两个不同的bean里都引用同一个bean对象,这个对象里有一个map类型的数据员,想实现两个不同的bean可以共享访问这个map类型数据。可是读map时,里面为空,为甚么,另外一边的bean再不断往map写数据了。
bean配置
<!-- 数据池 -->
<bean id="datapool" class="com.yjh.datapool.DataPoolImp">
<property name="size" value="100" />
</bean>
<!-- 多用户访问对象 -->
<bean id="cmdAction" class="com.yjh.action.CmdAction" scope="prototype">
<property name="datapool" ref="datapool" />
</bean>
<!-- 服务数据写入对象 -->
<bean id="udpDataMonitor" class="com.yjh.client.udp.UdpDataMonitor" init-method="init">
<property name="datapool" ref="datapool" />
</bean>

两个不同的bean里都引用同一个bean对象

即A B 同时都引用了C,这时候如果想数据共享,那么你要在spring里设置这个C为单例
在spring依赖注入配置里bean的作用域
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>
默认是单例模式,即scope="singleton"
另外scope还有prototype、request、session、global session作用域
scope="prototype"多例

请采纳哈..追问

datapool 这个bean我没配置scope哦,默认应该可以的啊

追答

那就要确认一下,看你那两个bean是否引为同一个

追问

怎么确认,配置情况就上面那样了,即使给datapool加上scope="singleton"还是一样的

参考技术A 可以用JAVA多态实现,举个简单的例子
比如 t3是公共Bean ,t1和t2是两个不同的bean,
t1中有设置t3的map的方法add
t2用于获取t3的map的方法get

将t1和t2分别继承 t3
使用的时候可以这样

t3 t1=new t1();
t1.add("key","value");

t3 t2=new t2();
System.out.println(t2.get("key"));

这样t1 t2就可以共用t3这个公共bean了 。
参考技术B 同一个bean对象设置成单例吧 参考技术C 请贴出代码

java中变量的分类

•按被声明的位置划分:
–成员变量:方法外部、类的内部定义的变量
–局部变量:方法或语句块内部定义的变量       
–注意:类外面(类对应的大括号外面)不能有变量的声明
•按所属的数据类型划分:
–基本数据类型变量
–引用数据类型变量

以上是关于java共享数据问题:两bean里都有变量引用了同一共bean,共bean里有map,想这两个bean可以共同访问这个map的主要内容,如果未能解决你的问题,请参考以下文章

Java垃圾回收

接口里可以有变量么?

垃圾回收机制

使用啥数据结构来快速存储文本文件,它有变量号。行数和变量号。在 C++ 中快速添加子元素?

java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(doubl

数据类型