2017-02-09 2 views
4

Я прошел через эту проблему и не смог найти, что происходит .... попытался @ComponentScan, попытался назвать мои услуги , нет, похоже, работает.Параметр 0 метода setUserService в <method> потребовался компонент <service>, который не был найден

03:35:05,193 WARN [org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext] (ServerService Thread Pool -- 81) Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityConfiguration': Unsatisfied dependency expressed through method 'setAuthenticationProvider' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'daoAuthenticationProvider' defined in class path resource [com/ipayso/config/SecurityConfiguration.class]: Unsatisfied dependency expressed through method 'daoAuthenticationProvider' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userDetailsService': Unsatisfied dependency expressed through method 'setUserService' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.ipayso.services.UserService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 
03:35:05,193 INFO [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean] (ServerService Thread Pool -- 81) Closing JPA EntityManagerFactory for persistence unit 'default' 
03:35:05,194 INFO [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 81) HHH000227: Running hbm2ddl schema export 
03:35:05,196 INFO [stdout] (ServerService Thread Pool -- 81) Hibernate: drop table if exists customer cascade 
03:35:05,200 INFO [stdout] (ServerService Thread Pool -- 81) Hibernate: drop table if exists private_key cascade 
03:35:05,205 INFO [stdout] (ServerService Thread Pool -- 81) Hibernate: drop table if exists public_key cascade 
03:35:05,208 INFO [stdout] (ServerService Thread Pool -- 81) Hibernate: drop table if exists user_login cascade 
03:35:05,211 INFO [stdout] (ServerService Thread Pool -- 81) Hibernate: drop sequence hibernate_sequence 
03:35:05,213 INFO [org.hibernate.tool.hbm2ddl.SchemaExport] (ServerService Thread Pool -- 81) HHH000230: Schema export complete 
03:35:05,223 WARN [org.springframework.boot.SpringApplication] (ServerService Thread Pool -- 81) Error handling failed (Error creating bean with name 'delegatingApplicationListener' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available) 
03:35:05,262 WARN [org.jboss.modules] (ServerService Thread Pool -- 81) Failed to define class org.springframework.boot.autoconfigure.data.rest.SpringBootRepositoryRestConfigurer in Module "deployment.devipayso-1.0.war:main" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link org/springframework/boot/autoconfigure/data/rest/SpringBootRepositoryRestConfigurer (Module "deployment.devipayso-1.0.war:main" from Service Module Loader): org/springframework/data/rest/webmvc/config/RepositoryRestConfigurerAdapter 

*************************** 
APPLICATION FAILED TO START 
*************************** 

Description: 

Parameter 0 of method setUserService in com.ipayso.services.security.UserDetailsServiceImpl required a bean of type 'com.ipayso.services.UserService' that could not be found. 


Action: 

Consider defining a bean of type 'com.ipayso.services.UserService' in your configuration. 

Мой SecurityConfiguration

package com.project.config 
@Configuration 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

private AuthenticationProvider authenticationProvider; 

@Autowired 
@Qualifier("daoAuthenticationProvider") 
public void setAuthenticationProvider(AuthenticationProvider authenticationProvider) { 
    this.authenticationProvider = authenticationProvider; 
} 

@Bean 
public PasswordEncoder passwordEncoder(StrongPasswordEncryptor passwordEncryptor){ 
    PasswordEncoder passwordEncoder = new PasswordEncoder(); 
    passwordEncoder.setPasswordEncryptor(passwordEncryptor); 
    return passwordEncoder; 
} 

@Bean 
public DaoAuthenticationProvider daoAuthenticationProvider(PasswordEncoder passwordEncoder, UserDetailsService userDetailsService){ 
    DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); 
    daoAuthenticationProvider.setPasswordEncoder(passwordEncoder); 
    daoAuthenticationProvider.setUserDetailsService(userDetailsService); 
    return daoAuthenticationProvider; 
} 

@Autowired 
public void configureAuthManager(AuthenticationManagerBuilder authenticationManagerBuilder){ 
    authenticationManagerBuilder.authenticationProvider(authenticationProvider); 
} 

@Override 
protected void configure(HttpSecurity httpSecurity) throws Exception { 
    httpSecurity 
      .authorizeRequests().antMatchers("/", "/home", "/login", "/signup").permitAll() 
     .and() 
      .formLogin() 
      .loginPage("/login") 
      .failureUrl("/login-error") 
     .and() 
      .logout() 
      .logoutSuccessUrl("/home"); 
} 
} 

Мои UserDetailServiceImpl

package com.project.service.security 
@Service("userDetailsService") 
public class UserDetailsServiceImpl implements UserDetailsService { 

private UserService userService; 
private Converter<User, UserDetails> userUserDetailsConverter; 

@Autowired 
@Qualifier(value = "userService") 
public void setUserService(UserService userService) { 
    this.userService = userService; 
} 

@Autowired 
@Qualifier(value = "userToUserDetails") 
public void setUserUserDetailsConverter(Converter<User, UserDetails> userUserDetailsConverter) { 
    this.userUserDetailsConverter = userUserDetailsConverter; 
} 

@Override 
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { 
    return userUserDetailsConverter.convert(userService.findByEmail(email)); 
} 
} 

Мой UserServiceImpl

package com.project.service 
@Service 
@Profile("springdatajpa") 
public class UserServiceImpl implements UserService{ 

private UserRepository userRepository; 

@Autowired 
public void setUserRepository(UserRepository userRepository) { 
    this.userRepository = userRepository; 
} 

private EncryptionService encryptionService; 

@Autowired 
public void setEncryptionService(EncryptionService encryptionService) { 
    this.encryptionService = encryptionService; 
} 


@Override 
public List<?> listAll() { 
    List<User> users = new ArrayList<>(); 
    userRepository.findAll().forEach(users::add); //fun with Java 8 
    return users; 
} 

@Override 
public User getById(Integer id) { 
    return userRepository.findOne(id); 
} 

@Override 
public User saveOrUpdate(User domainObject) { 
    if(domainObject.getPassword() != null){ 
     domainObject.setEncryptedPassword(encryptionService.encryptString(domainObject.getPassword())); 
    } 
    return userRepository.save(domainObject); 
} 
@Override 
@Transactional 
public void delete(Integer id) { 
    userRepository.delete(id); 
} 

@Override 
public User findByEmail(String email) { 
    return userRepository.findByEmail(email); 
} 
} 

Мои CommonBeanConfig

package com.project.config 
@Configuration 
public class CommonBeanConfig { 

@Bean 
public StrongPasswordEncryptor strongEncryptor(){ 
    StrongPasswordEncryptor encryptor = new StrongPasswordEncryptor(); 
    return encryptor; 
} 
} 

Мой Применение

package com.project 
@SpringBootApplication 
public class App extends SpringBootServletInitializer{ 

public static void main(String[] args) { 
    SpringApplication.run(applicationClass, args); 
} 

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(applicationClass); 
} 

private static Class<App> applicationClass = App.class; 
} 

Мои RepositoryConfig

package com.project.config 
@Configuration 
@EnableAutoConfiguration 
@EntityScan(basePackages = {"com.ipayso.model"}) 
@EnableJpaRepositories(basePackages = {"com.ipayso.repositories"}) 
@EnableTransactionManagement 
public class RepositoryConfiguration { 

} 
+1

Пожалуйста, немного сократите свой код. –

ответ

7

Вы ищете UserService с @Qualifier(value = "userService") здесь:

@Autowired 
@Qualifier(value = "userService") 
public void setUserService(UserService userService) { 
    this.userService = userService; 
} 

, но вы не имеете его, так как ваш UserServiceImpl annot ated как @Service без предоставления его идентификатора.

Чтобы установить идентификатор на ваш UserServiceImpl, вам необходимо его аннотировать @Service("userService"). Но если у вас есть одна реализация UserService, просто удалите @Qualifier(value = "userService") из setter, потому что она избыточна.

И мне кажется, это не единственное место, где вы должны удалить @Qualifier.

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

+0

+1 к этому ответу. Проверьте следующую статью Spring о аннотации '@ Qualifier' https://spring.io/blog/2014/11/04/a-quality-qualifier – jcgarcia

+0

Вы правы, проблема заключалась в вызове моей службы через' @ Qualifier', когда У меня не было имени для этого. –

+0

@ CléberOliveira, если этот ответ решит вашу проблему, вы можете принять его, чтобы было легче найти ответ для кого-то в будущем – Stanislav

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