2012-06-13 4 views
0

Я пытаюсь создать боб и чем пытаться внедрить то же самое в моем контроллере, но я получаю отказ создание боб error.Here мой кодсоздание Bean терпит неудачу (весна)

@Service("springSecurityLoginServiceImpl") 
public class SpringSecurityLoginServiceImpl implements SpringSecurityLoginService 
{ 
    //impl 
} 

это как Я пытаюсь внедрить его в моем контроллере

@Controller 
@RequestMapping("springSecurity/login.json") 
public class SpringSecurityLoginController 
{ 
    @Autowired 
    @Qualifier("springSecurityLoginServiceImpl") 
    SpringSecurityLoginService springSecurityLoginService; 

} 

Там нет записи в Spring-MVC-конфигурационный файл XML, кроме этих аннотаций, но когда я начинаю сервер облицовочного следующего исключения

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0' 
defined in ServletContext resource [/WEB-INF/config/spring-mvc-config.xml]: 
Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'springSecurityLoginController': 
Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
Could not autowire field: com.core.servicelayer.user.SpringSecurityLoginService com.storefront.controllers.pages.SpringSecurityLoginController.springSecurityLoginService; 
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No matching bean of type [com.core.servicelayer.user.SpringSecurityLoginService] found for dependency: 
expected at least 1 bean which qualifies as autowire candidate for this dependency. 
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), 
@org.springframework.beans.factory.annotation.Qualifier(value=springSecurityLoginServiceImpl)} 

я не уверен, что я делаю неправильно или что дополнительным я должен сделать

+1

Можете ли вы показать тег компонента-сканирования, который вы используете в spring-mvc-config.xml? – gkamal

ответ

1

SpringSecurityLoginController класс относятся SpringSecurityLoginService класса, для которого компонент не определен. Об этом говорит ошибка.

Это правда, потому что вы определили только компонент для класса LoginServiceImpl, который, как представляется, не расширяет SpringSecurityLoginService.

Алгоритм поиска фасоли весны сначала ищет фасоль, тип которого, или продолжается, SpringSecurityLoginService. Затем он сужает параметры avaialble, используя Qualifier. В этом случае нет боб не найден в первую очередь ...

См Spring doc:

4.11.3 Точная настройка аннотаций на основе автоматического связывания с отборочные

Поскольку автоматического связывания по типу может привести к нескольким кандидатам, часто требуется , чтобы иметь больший контроль над процессом выбора. Один из способов: выполнить это с помощью аннотации @Qualifier от Spring. Это позволяет использовать для сопоставления значений классификатора с конкретными аргументами, сужая набор совпадений типа, чтобы конкретный компонент был выбран для каждого аргумента .

Вам необходимо, чтобы LoginServiceImpl осуществил, например, SpringSecurityLoginService.

EDIT

Поскольку это была просто опечатка вы можете быть не включая SpringSecurityLoginService «s пакет в component-scan тег, в файле конфигурации пружинной (как gkamal уже упоминалось). Вы должны иметь что-то вроде:

<context:component-scan base-package="org.example"/> 

где org.example следует заменить пакет SpringSecurityLoginService «s.

+0

моя ошибка, поскольку я только что сделал некоторую опечатку в своем посте. Пожалуйста, см. Обновленный пост как 'SpringSecurityLoginService', реализуемый' SpringSecurityLoginServiceImpl' –

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