菜鸡提问, springboot 的 service 单例模式下,全局变量使用 static 修饰与不适用 static 修饰,在效果上有区别吗

2020-04-02 15:27:22 +08:00
 EminemW

问题应该写的很清楚了把,我一般是用 static 修饰的,准确的做法是修饰还是不修饰呢。

3007 次点击
所在节点    问与答
12 条回复
kookio
2020-04-02 17:43:39 +08:00
没懂说的啥效果,static 修饰直接通过类名就能调用,类加载时就会被初始化,否则只能通过 new 的对象调用,和单例有啥关系
xhinliang
2020-04-02 17:49:19 +08:00
看个人喜好。。。
gemini767
2020-04-02 17:53:23 +08:00
不要乱写代码。。。。
首先 static 的存放不一致,其次加载方式不一致,乱写只会给自己或者他人埋坑
wysnylc
2020-04-02 18:13:33 +08:00
那有什么岁月静好,只不过有人在替你负重前行
EminemW
2020-04-02 18:16:28 +08:00
@kookio 我的意思是 比如在这个 Service 里面有一个全局变量 /常量,假设它名为 EXPIRE,这个 EXPIRE 会被 Service 里面的几个方法使用,(外部不需要调用这个 EXPIRE ),那它用不用 static 修饰都不影响使用效果吧。
EminemW
2020-04-02 18:20:27 +08:00
@gemini767 SpringBoot 中的 Service 默认是单例的吧,在这种情况下,如果我有个类缓存 LoadingCache,那它用 static 修饰跟不用 static 修饰的效果是一样的吧。我一般是会用 static 修饰的,只是不知道哪个更好
EminemW
2020-04-02 18:31:36 +08:00
@xhinliang 我一般都是加上 static 的。。
cccy0
2020-04-02 18:53:31 +08:00
常量还是加上 static 比较好, 如果在别的类中使用这个常量, 就不用注入这个 service 了
gemini767
2020-04-03 09:55:06 +08:00
@EminemW loadingCache 没必要是全局变量,每一个 service 的 guava 肯定有自己业务场景,没必要去做到全局使用吧,我理解的全局变量一般是配置参数,环境变量之类的,减少业务参数全局飞的现象
kookio
2020-04-04 23:08:56 +08:00
@EminemW 光讲使用效果没区别,不加 static 是属于对象,加 static 属于类,两者在内存中存放的位置不一样,一般如果只是对象自己使用就不用加了,要被外部类使用就加上,还有严格来说 Java 没有全局变量这个说法,叫成员变量和静态变量。
EminemW
2020-04-04 23:49:10 +08:00
@kookio 感谢,这样讲我就懂了
EminemW
2020-04-04 23:51:53 +08:00
@kookio 这样看来我原来大部分加 static 的变量,可以不用加了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/658681

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX