首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring未满足的依赖项通过类型为0的构造函数参数表示

Spring未满足的依赖项通过类型为0的构造函数参数表示
EN

Stack Overflow用户
提问于 2014-10-27 03:37:20
回答 4查看 87.3K关注 0票数 12

完整的信息是

代码语言:javascript
复制
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: 
    Error creating bean with name 'userRepositoryUserDetailsService' defined in file 
    [/Users/tdaley/apache-tomcat-8.0.12/wtpwebapps/cloud-management/WEB-INF/classes/
       org/cru/cloud/management/security/UserRepositoryUserDetailsService.class]: 
    Unsatisfied dependency expressed through constructor argument with index 0 of type 
[org.cru.cloud.management.data.UserRepository]: : No qualifying bean of 
    type [org.cru.cloud.management.data.UserRepository] found for dependency: 
        expected at least 1 bean which qualifies 
        as autowire candidate for this dependency. 
     Dependency annotations: {}; 
nested exception is 
    org.springframework.beans.factory.NoSuchBeanDefinitionException: 
       No qualifying bean of type [org.cru.cloud.management.data.UserRepository] found 
       for dependency: expected at least 1 bean 
       which qualifies as autowire candidate for this dependency. 
     Dependency annotations: {}

我使用的是Java配置。以下代码片段来自spring boot教程gs-spring-security-3.2:

代码语言:javascript
复制
package org.cru.cloud.management.security;

import java.util.Collection;

import org.cru.cloud.management.data.User;
import org.cru.cloud.management.data.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class UserRepositoryUserDetailsService implements UserDetailsService {
    private final UserRepository userRepository;

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

    @Override
    public UserDetails loadUserByUsername(String username)
            throws UsernameNotFoundException {
        User user = userRepository.findByEmail(username);
        if(user == null) {
            throw new UsernameNotFoundException("Could not find user " + username);
        }
        return new UserRepositoryUserDetails(user);
    }

    private final static class UserRepositoryUserDetails extends User implements UserDetails {    

        private UserRepositoryUserDetails(User user) {
            super(user);
        }

        @Override
        public Collection<? extends GrantedAuthority> getAuthorities() {
            return AuthorityUtils.createAuthorityList("ROLE_USER");
        }

        @Override
        public String getUsername() {
            return getEmail();
        }

        @Override
        public boolean isAccountNonExpired() {
            return true;
        }

        @Override
        public boolean isAccountNonLocked() {
            return true;
        }

        @Override
        public boolean isCredentialsNonExpired() {
            return true;
        }

        @Override
        public boolean isEnabled() {
            return true;
        }

        private static final long serialVersionUID = 5639683223516504866L;
    }
}

public interface UserRepository extends CrudRepository<User, Long>
{
    User findByEmail(String email);
}

关于如何解决这个问题的建议?

EN

回答 4

Stack Overflow用户

发布于 2014-10-27 17:35:52

您的配置类中是否有@EnableJpaRepositories注释,扫描设置是否正确?默认情况下,带有注释的类或接口所在的包将成为存储库扫描的基包。您可以通过设置basePackages (或者更好的- basePackageClasses)属性的值来控制这一点。

您可以使用Spring Tools Suite检查在您的上下文中声明了哪些beans (存储库应该在Spring Elements > Beans > Spring Data Repositories下可见)。

票数 10
EN

Stack Overflow用户

发布于 2014-10-27 03:41:05

org.cru.cloud.management.data.UserRepository::没有类型的限定bean

找不到UserRepository bean。也许您忘记了将注释放到UserRepository中。

代码语言:javascript
复制
@Component
public MyClass implements UserRepository{}

如果你自动连接userRepository,那么你的MyClass将被注入。

另外:

代码语言:javascript
复制
public MyClass implements UserRepository{}
public YourClass implements UserRepository{}

@Autowired
public blabla(@Qualifier("myClass") UserRepository userRepo)

@Autowired
public blabla(@Qualifier("yourClass") UserRepository userRepo)

我想这会有帮助的。

票数 0
EN

Stack Overflow用户

发布于 2014-10-27 17:41:06

使用spring @Component批注注释实现UserRepository的类

代码语言:javascript
复制
@Component
public MyUserRepository implements UserRepository
{
    User findByEmail(String email){
            return new User();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26577084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档