在spring boot中获取此错误:应用程序上下文中某些bean的依赖关系形成一个循环:

时间:2017-06-02 22:20:59

标签: java spring-boot

我是春天的新手。为了学习它,我跟随Josh Long的一个例子来创建一个OAuth服务器。他的例子和我正在处理的代码之间的区别在于我正在尝试使用MySQL而不是内存数据库。我会在帖子中留下相关文件。

提前致谢。

哦,这是视频https://www.youtube.com/watch?v=EoK5a99Bmjc

的链接

这是我的实现Repository

的类
@Service
public class AccountRepositoryImpl implements UserDetailsService {

    @Autowired
    private final AccountRepository accountRepository;

    public AccountRepositoryImpl(AccountRepository accountRepository){
        this.accountRepository = accountRepository;
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        return accountRepository.findByUsername(username)
                .map(account -> new User(account.getUsername(),
                        account.getPassword(), account.isActive(), account.isActive(), account.isActive(), account.isActive(),
                        AuthorityUtils.createAuthorityList("ROLE_ADMIN", "ROLE_USER")
                        ))
                .orElseThrow(() ->new UsernameNotFoundException ("Couldn't find the username " + username + "!"));  
    }
}

这是存储库

public interface AccountRepository extends JpaRepository<Account, Long> {
    Optional<Account> findByUsername(String username);
}

2 个答案:

答案 0 :(得分:1)

这两部分完全相同:

@Autowired
private final AccountRepository accountRepository;

public AccountRepositoryImpl(AccountRepository accountRepository){
    this.accountRepository = accountRepository;
}

当您在accountRepository上添加@Autowired注释时,Spring会自动将AccountRepository实例注入您的AccountRepositoryImpl类。因此,您需要删除第二个选择,因为它很可能与@Autowired注释冲突。

编辑-----------------------------

@Component 
public class ApplicationStartUp implements ApplicationListener<ApplicationReadyEvent> {

    @Autowired
    private AccountRepository accountRepository;

    @SuppressWarnings("null") 
    @Override 
    public void onApplicationEvent(final ApplicationReadyEvent event) { 
        Account account = new Account("sPatel", "Spring", true); 

        accountRepository.save(account); 
        return; 
    }

}

答案 1 :(得分:0)

您对AccountRepository界面的实施是什么?

如果你没有为AccountRepository提供实现,那么spring无法初始化它。

如果您在Exception的实施中自动装配 AccountRepositoryImpl,则可能会出现AccountRepository(依赖关系形式周期)。

Exception(应用程序上下文中某些bean的依赖关系形成一个循环)发生时,您的日志内容是什么?