Создано синглтон, кажется, не могу использовать его в моем веб-приложении - PullRequest
0 голосов
/ 18 декабря 2011

Я создал синглтон в соответствии с тем, как «эффективный Java» говорит об этом: https://sites.google.com/site/io/effective-java-reloaded (см. Слайды на стр. 35, я думаю)

Так что мой enum-синглтон-класс выглядит так:*

public enum MySettings {
    INSTANCE;


    private int someValue;

    private MySettings() {
        someValue = 10;
    }

    public int getSomeValue() {
        return someValue;
    }
}

Теперь я попытался использовать его в классе, но во время выполнения он выдавал ошибку:

public class MongoDaoImpl implements MongoDao {
    private int mongoConnectionPoolSize = MySettings.INSTANCE.getSomeValue();
}

Почему здесь происходит сбой?

Дело в моем синглтонечтобы хранить информацию, связанную с конфигурацией, чтобы я мог использовать ее для установки значений типа конфигурации, чтобы мне не пришлось жестко их кодировать.

Я получаю сообщение об ошибке для MongoDaoImpl:

java.lang.NoClassDefFoundError: Could not initialize class MongoDaoImpl
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)

Ответы [ 3 ]

2 голосов
/ 18 декабря 2011

Вы пытаетесь повлиять на int на строку.Это не может скомпилировать.Либо метод getSomeValue() должен возвращать строку, либо mongoConnectionPoolSize должен быть целым числом.

0 голосов
/ 18 декабря 2011

getSomeValue() возвращает int, и вы пытаетесь присвоить его переменной типа String, поэтому произошла ошибка типа. Но это должно произойти во время компиляции.

Почему mongoConnectionPoolSize имеет тип String? Похоже, это должно быть int.

Какое фактическое сообщение об ошибке вы получаете?

Обновление: Похоже, вы хотите, чтобы класс MongoDaoImpl был создан в Spring. Для этого нужен открытый конструктор без аргументов. У него есть один? Не похоже, что проблема связана с синглтоном. Это также может быть связано с конфигурацией bean-компонента Spring.

0 голосов
/ 18 декабря 2011

Поскольку вы объявили свойство с String, а ваш метод возвращает int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...