2017-02-09 81 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

相關問題