wake-up-neo.net

Der Parameter der Methode setUserService in <method> erfordert ein Bean vom Typ <service>, das nicht gefunden werden konnte

Ich habe dieses Problem durchlaufen und konnte nicht herausfinden, was los ist.

Error:

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.

Meine 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");
}
}

Meine 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));
}
}

Meine 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);
}
}

Meine CommonBeanConfig:

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

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

Meine App:

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;
}

Meine RepositoryConfiguration:

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

}
5

Sie suchen nach UserService mit @Qualifier(value = "userService") hier:

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

sie haben es jedoch nicht, da Ihre UserServiceImpl als @Service angegeben ist, ohne ihre ID anzugeben.

Um id auf Ihre UserServiceImpl zu setzen, müssen Sie diese mit @Service("userService") versehen. Wenn Sie jedoch eine einzige UserService-Implementierung haben, löschen Sie einfach @Qualifier(value = "userService") aus dem Setter, da diese redundant ist.

Und es scheint mir, es ist nicht der einzige Ort, an dem Sie einen @Qualifier entfernen müssen.

@Qualifier-Annotation ist erforderlich, um eine genaue Bean auszuwählen, wenn Sie mehrere Beans desselben Typs haben. Wenn Sie einen einzigen haben, müssen Sie ihn nicht verwenden.

10
Stanislav

Wenn Sie diesen Fehler beim Ausführen des Junit-Tests erhalten, besteht die Möglichkeit, dass Sie den Mock für das Objekt hinzufügen müssen 

@MockBean ClassError classError; in der Klasse, die @SpringBootConfiguration-Annotation hat

0
Barani r