Правильный способ сделать синглтон bean-компонентом Spring

Я конвертирую синглтон в bean-компонент Spring, поэтому, если синглтон не удается инициализировать, то весь контекст Spring всего веб-приложения загружается неправильно.

Преимущество того, что контекст Spring не загружается должным образом, состоит в том, что люди заметят и исправят конфигурацию во время самого развертывания. В отличие от синглтона 'non-spring bean': когда это вызывает исключение во время инициализации, никто не замечает ... пока реальный пользователь не пожалуется на отсутствие функциональности.

Мои изменения работают должным образом ... но я не уверен, что я делаю правильно.
t загрузить правильно. Преимущество создания Spring ...

Я конвертирую синглтон в bean-компонент Spring, поэтому, если синглтон не удается инициализировать, то весь контекст Spring всего веб-приложения загружается неправильно.

Преимущество того, что контекст Spring не загружается должным образом, заключается в том, что люди заметят и исправят конфигурацию во время самого развертывания. В отличие от синглтона 'non-spring bean': когда это вызывает исключение во время инициализации, никто не замечает ... пока реальный пользователь не пожалуется на отсутствие функциональности.

Мои изменения работают должным образом ... но я не уверен, что я делаю правильно.
t загрузить правильно. Преимущество создания Spring ...

Я конвертирую синглтон в bean-компонент Spring, поэтому, если синглтон не удается инициализировать, то весь контекст Spring всего веб-приложения загружается неправильно.

Преимущество того, что контекст Spring не загружается должным образом, состоит в том, что люди заметят и исправят конфигурацию во время самого развертывания. В отличие от синглтона 'non-spring bean': когда это вызывает исключение во время инициализации, никто не замечает ... пока реальный пользователь не пожалуется на недостающую функциональность.

Мои изменения работают должным образом ... но я не уверен, что я делаю правильно.
контекст Spring не загружается должным образом.

Преимущество того, что контекст Spring не загружается должным образом, заключается в том, что люди заметят и исправят конфигурацию во время самого развертывания. В отличие от синглтона 'non-spring bean': когда это вызывает исключение во время инициализации, никто не замечает ... пока реальный пользователь не пожалуется на недостающую функциональность.

Мои изменения работают должным образом ... но я не уверен, что я делаю правильно.
контекст Spring не загружается должным образом.

Преимущество того, что контекст Spring не загружается должным образом, состоит в том, что люди заметят и исправят конфигурацию во время самого развертывания. В отличие от синглтона 'non-spring bean': когда это вызывает исключение во время инициализации, никто не замечает ... пока реальный пользователь не пожалуется на недостающую функциональность.

Мои изменения работают должным образом ... но я не уверен, что я делаю правильно.
Есть какие-нибудь мысли?

Код выглядит так:

public class MySingleton {

    private static MySingleton INSTANCE = null;
    private MySingleton(){}


public static MySingleton getInstance(){
    if(INSTANCE == null){
        synchronized(MySingleton.class){
            if(INSTANCE == null){
                try{
                    doWork()
                }catch(Exception e){
                    throw new IllegalStateException("xyz", e);
                }
                INSTANCE = new MySingleton();
            }
        }
    }

    return INSTANCE;
}

private static void doWork() {
    // do some work
    }

}

А в Spring config xml компонент будет определен как:



Примечание: По большей части это похоже на стратегию, обсуждаемую в этой статье: http://springtips.blogspot.com/2007/06/configuration-hell-remedy-with.html


Редактировать 1:

Классы, которые используют этот синглтон, сами по себе не являются Spring beans .. они это просто не весенние pojos, которые я не могу преобразовать в весну. Они должны полагаться на метод getInstance () для получения синглтона.


Редактировать 2: (копирование комментария, сделанного мной ниже, в этот раздел описания) Я пытаюсь решить две задачи:

  1. Я хочу, чтобы Spring инициализировал синглтон. Так что если инициализация завершается неудачей, затем происходит сбой загрузки приложения.
  2. Я хочу, чтобы другие классы могли использовать классы, не полагаясь на contextAwareObj.getBean ("MySingleton")


РЕДАКТИРОВАТЬ 3 (ОКОНЧАТЕЛЬНОЕ):

Я решил сделать этот класс одноэлементным ... и не делаю его весенним компонентом. Если ему не удастся инициализировать, он что-то запишет в файл журнала ... надеюсь, человек, выполняющий развертывание, заметит ... Я отказался от подхода, о котором упоминал ранее, потому что я чувствую, что это создаст кошмар обслуживания в будущем, поэтому мне пришлось выберите между - singleton - или - spring bean. Я выбрал синглтон.

20
задан Crowie 13 August 2013 в 13:13
поделиться