2016-06-10 1 views
0

Wenn ich meine Anwendung zu starten bekomme ich diesen Fehler in meinem stacktraceverschachtelte Ausnahme ist NoSuchBeanDefinitionException: keine passenden Bean vom Typ [com.springfoundation.service.SecurityService]

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.springfoundation.service.SecurityService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: 

dies ist der Code ich in meinem Frühjahr habe Sicherheit class.java

public interface SecurityService { 
    String findLoggedInUsername(); 
    void autologin(String username, String password); 
    } 

dies ist der Code, den ich von der Schnittstelle Implementierer haben

public class SecurityServiceImpl implements SecurityService { 

    @Autowired 
     private AuthenticationManager authenticationManager; 

     @Autowired 
     private UserDetailsService userDetailsService; 

     private static final Logger logger = LoggerFactory.getLogger(SecurityServiceImpl.class); 

     @Override 
     public String findLoggedInUsername() { 
      Object userDetails = SecurityContextHolder.getContext().getAuthentication().getDetails(); 
      if (userDetails instanceof UserDetails) { 
       return ((UserDetails)userDetails).getUsername(); 
      } 

      return null; 
     } 

     @Override 
     public void autologin(String username, String password) { 
      UserDetails userDetails = userDetailsService.loadUserByUsername(username); 
      UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities()); 

      authenticationManager.authenticate(usernamePasswordAuthenticationToken); 

      if (usernamePasswordAuthenticationToken.isAuthenticated()) { 
       SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken); 
       logger.debug(String.format("Auto login %s successfully!", username)); 
      } 
     } 

der Code in meinem contoller wird unter Ausnutzung der Federsicherheitsklasse I gezeigt oben

angegeben
@Controller 
public class UserController { 
    @Autowired 
    private UserService userService; 
    @Autowired 
    private SecurityService securityService; 

ich die obige Erklärung noch

innerhalb der Controller-Klasse zu einem Mapping bin mit
@RequestMapping(value = "/registration", method = RequestMethod.POST) 
    public String registration(@ModelAttribute("userForm") User userForm, BindingResult bindingResult, Model model) { 
     userValidator.validate(userForm, bindingResult); 

     if (bindingResult.hasErrors()) { 
      return "registration"; 
     } 

     userService.save(userForm); 

     securityService.autologin(userForm.getUsername(), userForm.getPasswordConfirm()); 

     return "redirect:/welcome"; 
    } 

diesem die komplette stacktrace meiner Frage, die ich zur Zeit

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private 
com.springfoundation.service.SecurityService com.springfoundation.controller.UserController.securityService; 
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type 
[com.springfoundation.service.SecurityService] 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)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:513) ~[spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:92) ~[spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) ~[spring-beans-3.1.4.RELEASE.jar:3.1.4.RELEASE] 
    ... 22 common frames omitted 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.springfoundation.service.SecurityService] 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)} 

Bitte bin vor, was falsch sein könnte, dass mein Code die obigen Fehler angezeigt werden

+0

SecurityServiceImpl ist nicht mit '@ Component' (oder '@ Service') annotiert, es handelt sich also nicht um eine Spring-Bean. –

+0

Eigentlich habe ich es in meinem Code, @Service öffentliche Klasse UserServiceImpl implementiert UserService { – Blaze

+0

Der Fehler ist versteckt in was Sie nicht gepostet haben: Was ist das Paket wird gescannt? Was ist das Paket Ihrer Implementierung? Erweitert es die korrekte Schnittstelle? –

Antwort

0

Haben Sie @ComponentScan("com.your.securityservice.package") zu Ihrer Konfigurationsdatei config java/xml hinzugefügt? Wenn Sie dies noch nicht getan haben, erkennt der Spring-Container die Anmerkungen des Service nicht.

+0

Ich habe es ...... – Blaze

+0

Kannst du den vollen Stapel verfolgen? Mit dem, was Sie geliefert haben, konnte nichts schief gehen. – AlexOlsen

+0

Ich habe den Autowired in der Controller Klasse auskommentiert und es hat funktioniert. Ist das sinnvoll? >>>>>>>>>>>>>>>>>> @ Autowired private SecurityService securityService; – Blaze