2017-02-09 77 views
4

我已经通过这个问题,无法找到正在发生的事情....试图@ComponentScan,试图命名我的服务,似乎没有工作。方法setUserService的参数0在<method>需要一个类型为<service>的bean,无法找到

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注释如果没有提供它的ID,则为@Service

要为您的UserServiceImpl设置ID,您需要使用@Service("userService")对其进行注释。但是如果你有一个单独的UserService实现,只需从setter中删除@Qualifier(value = "userService"),因为它是多余的。

在我看来,这不是唯一的地方,你必须删除@Qualifier

@Qualifier如果您有许多相同类型的bean,则需要注释来选择精确的bean。如果你有一个,你不需要使用它。

+0

+1对此答案。查看以下有关'@ Qualifier'注释的Spring文章https://spring.io/blog/2014/11/04/a-quality-qualifier – jcgarcia

+0

你说得对,问题是当我通过'@ Qualifier'调用我的服务时我没有一个名字。 –

+0

@CléberOliveira如果这个答案解决了您的问题,您可以接受它,以便将来更容易找到某个人的答案 – Stanislav

相关问题