我是春天的新手。为了学习它,我跟随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);
}
答案 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的依赖关系形成一个循环)发生时,您的日志内容是什么?