请问大神一个关于bean单例的问题

牧码Yin 发布于 2018/03/15 09:46
阅读 302
收藏 0

请问大神,一个bean ,他的作用域为singleton  的时候,是不是每次请求都返回一个实例,这样的话,岂不是我每次查询都返回的是同一个对象,这是不是意味着,不管我怎么查,最后得到的数据都是一样的啊? 本人比较笨,如果这个问题显得很蠢,不要见笑,求大神帮我解答,谢谢!!

加载中
0
DeMoNHaDeS
DeMoNHaDeS

对象是同一个,属性可能被修改。

牧码Yin
牧码Yin
好的,谢谢
0
Kit_lee
Kit_lee

spring bean默认就是singleton,则只有一个实例,如果是mvc工程,每次请求都是调用该实例的一个线程。如果该对象是有状态的(有共享的变量),那会有线程安全问题。但至于你问到的“每次查询”,具体是查询什么?如果是查询数据库,那么跟bean的实例始终是同一个实例没什么关系。

Kit_lee
Kit_lee
回复 @买星星的小矮人 : 比方说你写了一个工具类ClassA,这个类在其他好多class里边都用到。如果不用spring,你会在每个class里边写new ClassA实例化一个对象。但如果是用spring你可以在xml或java配置类里边声明一次这个ClassA,然后在其他用到它的class里边注入,然后使用,即只需要new一次,整个应用里边就只有一个ClassA实例在跑(多线程)
牧码Yin
牧码Yin
回复 @Kit_lee : 哦哦,好像明白一点了,那这个单例的对象,用来干嘛啊,是用来作为另一个类的属性,来调用这个类的方法吗?
Kit_lee
Kit_lee
回复 @买星星的小矮人 : 你从数据库查询出来数据再放到对象里边,但这样的对象不会是一个spring bean呀,只是一次会话期间实例化的对象,跟所谓的singleton没关系。spring bean是在应用启动初始化时通过声明来创建实例的。
牧码Yin
牧码Yin
谢谢您的解答,但是我还是不明白,数据库查询的话,查出来的数据,对你的对象进行实例化,,被实例化的那个对象是不是就是那个原形的对象啊,如果是的话,那这次实例化的操作,如果有部分属性没有set,那岂不是这个对象还会保留上次实例化的属性了吗? 如果这是一个新的对象,那不就意味着,得到的是两个对象,可是原形的话,不是只有一个对象吗?
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部