单例模式的坑

Posted 平凡不平凡凡凡有约

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式的坑相关的知识,希望对你有一定的参考价值。

  之前没用到单例模式,前一阵子项目需要,当时有这样的一个场景.我们的消息服务,需要保证消息下发的可靠性,有一个线程重发机制,这时线程需要动态的获取消息服务中的消息队列的消息信息,从而保证消息的可靠性下发.

    这时候我就尝试使用单例模式,在这个系统中,有好几个地方(类中)都用到了这个单例类,并且有一个专门的线程检测那个单例类中的map值.这时候这个单例类确实是满足我们需要的场景.

    这时候问题来了,如果我们需要在这个单例类中做其他的操作,之后我们增加了一个需求,我们需要检测用户的状态,从而做到消息服务集成第三方的消息发送通道,这样保证用户在离线状态下也可以受到消息.这时我需要调用其他的service服务.这时候自动装载就是不能正常运行.乃至在使用@Value获取文件中的属性值也不能.

    之后经过一番的探索找到了,问题的解决方案,使用@postConstruct这个注解,配合花里胡哨的操作就解决了不能自动装载,以及获取属性值的问题.

    查了资料,@postConstruct注解修饰的方法,类似也创建servlet的init方法.具体的关于postConstruct的信息可以自行查找资料,这里仅仅只是提供一种解决问题的方案.

    具体使用的可以参考下图


以上是关于单例模式的坑的主要内容,如果未能解决你的问题,请参考以下文章

单例模式

如何正确地写出单例模式

为什么用枚举类来实现单例模式越来越流行?

为什么用枚举类来实现单例模式越来越流行?

JAVA如何正确地写出单例模式(转)

单例模式单例模式精讲(上)