Spring BeanIsAbstractException - PullRequest
       9

Spring BeanIsAbstractException

1 голос
/ 19 ноября 2008

Я пытаюсь загрузить пружинные бины, используя метод XmlWebApplicationContext setConfigLocations Тем не менее, я продолжаю получать

BeanIsAbstractException

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

Я использую Spring2.0.8.jar с jetspeed2.1.

фасоль:

<bean id="ThreadPool" abstract="true" class="com.sample.ThreadPoolFactoryBean"/>

Код:

ctx = appContext;
    appContext.refresh();
    BeanFactory factory = appContext.getBeanFactory();
    String[] beansName = appContext.getBeanFactory()
            .getBeanDefinitionNames();

...

map.put(beansName[mnCnt], factory.getBean(beansName[mnCnt]));

У кого-нибудь есть идеи?

Ответы [ 4 ]

2 голосов
/ 19 ноября 2008
map.put(beansName[mnCnt], factory.getBean(beansName[mnCnt]));

Это твоя проблема, не так ли? Вызывая getBean с именем абстрактного компонента, вы пытаетесь создать его экземпляр, что сгенерирует исключение.

2 голосов
/ 19 ноября 2008

Следующий код попытается и не сможет создать экземпляр вашего абстрактного класса:

map.put(beansName[mnCnt], factory.getBean(beansName[mnCnt]));

Просто, чтобы не было путаницы, «абстрактные» bean-компоненты не совпадают с абстрактными классами. В первую очередь это удобный механизм для сокращения дублирующихся настроек свойств.

Определение дочернего компонента будет наследовать значения аргумента конструктора, значения свойств и метод переопределяются из родительского, с опцией добавить новые значения. Если метод init, метод destroy, фабричный бин и / или фабричный метод указан, они переопределят соответствующий родительские настройки.

Придуманный пример:

class Fruit {
    private String colour;
    private String name;
    // setters...
}

class Car {
    private String colour;
    private String manufacturer;
    // setters...
}

И

<!-- specifying a class for an abstract bean is optional -->
<bean id="sharedPropsBean" abstract="true">
    <property name="colour" value="red" />
</bean>

<bean id="myFruit" parent="sharedPropsBean" class="Fruit">
    <property name="name" value="apple" />
</bean>

<bean id="myCar" parent="sharedPropsBean" class="Car">
    <property name="manufacturer" value="Ferrari" />
</bean>
1 голос
/ 19 ноября 2008

фасоль:

<bean id="ThreadPool" abstract="true" class="com.sample.ThreadPoolFactoryBean"/>

Код:

ctx = appContext;
    appContext.refresh();
    BeanFactory factory = appContext.getBeanFactory();
    String[] beansName = appContext.getBeanFactory()
            .getBeanDefinitionNames();

Затем, когда я перебираю строковый массив, он выдает исключение.

0 голосов
/ 19 ноября 2008

Вы повторяете и пишете имя, чтобы сказать, stdout? Это не должно вызывать проблем. Разве в вашем коде нет ничего, что пыталось бы заставить Spring создать экземпляр этого компонента?

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