2014-02-04 4 views
0

Я пытаюсь реализовать простой веб-сервис, используя весну. В app-ctx.xml добавлена ​​декларация bean-компонента:Невозможно создать экземпляр bean

<bean class="com.user.services.MessageService_BindingImpl" scope="request"/> 

Все работает отлично. После этого я решил попробовать использовать инъекции через конструктор - я добавил простой конструктор с одним аргументом (тип String) и я Изменив фасоль confoguration:

<bean class="com.user.services.MessageService_BindingImpl" scope="request"> 
    <constructor-arg type="java.lang.String" value="Hello world"/></bean> 

И после этого я получил следующее исключение:

java.lang.InstantiationException: com.user.services.MessageService_BindingImpl

Похоже, есть что-то с моим конструктором. После добавления конструктора по умолчанию, отличного от arg, исключение исчезает. Как использовать перегруженный конструктор? Благодарю.

MessageService_BindingImpl -

public class MessageService_BindingImpl implements com.user.service.MessageService_PortType { 

    public MessageService_BindingImpl (String hello) { 
    } 

    public ReadMessagesResponse readMessages(ReadMessagesRequest readMessagesRequest) throws RemoteException { 
     MessageService mService = new MessageService(); 
     return mService.readmessages(); 
    } 
} 
+2

Давайте посмотрим ваш класс MessageService_BindingImpl. –

+0

Также вы можете опубликовать полное исключение? – Taylor

+0

Не уверен - это именно то, что я получаю как ответ на мыло. В файлах журналов сервера/приложения ничего нет ... –

ответ

1

Может быть, я неправильно понял ваш вопрос.

Вы спрашиваете, почему

<bean class="com.user.services.MessageService_BindingImpl" scope="request"/> 

терпит неудачу с классом как

public class MessageService_BindingImpl implements com.user.service.MessageService_PortType { 

    public MessageService_BindingImpl (String hello) { 
    } 

    ... 
} 

?

Если да, то ответ заключается в том, что, не предоставляя никаких constructor-arg, Spring попытается использовать конструктор без аргументов класса. Поскольку у вас его нет, он не может его использовать.

+0

Возможно (спасибо моим языковым навыкам :-). Первое определение бина, связанное с классом без какого-либо конструктора. После добавления атрибута constructor-arg класс был изменен путем перегрузки конструктора по умолчанию (с аргументом типа string). –

+1

@psed В Java, если вы не предоставляете никакого конструктора для своего класса, компилятор добавляет конструктор no-arg по умолчанию. Если вы предоставляете конструктор, компилятор ничего не делает. Если у вас есть только один конструктор, перегрузка не происходит. –

Смежные вопросы