인프런 커뮤니티 질문&답변

hk님의 프로필 이미지
hk

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

자바 코드로 직접 스프링 빈 등록하기 예제에서 에러가 발생합니다.

작성

·

1.3K

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

안녕하세요. 스프링 빈과 의존관계에서 자바코드로 직접 스프링빈 등록하기부분을 듣고있습니다.

회원 서비스와 회원 리포지토리의 @Service, @Repository, @Autowired 애노테이션을 제거하고 @bean 설정할때

    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository());
    }

에서 에러가납니다.

에러 메시지는

' java: incompatible types: hello.hellospring.repository.MemberRepository cannot be converted to hello.hellospring.repository.MemoryMemberRepository' 입니다.

캐스팅해야한다고 뜨는데, 수업화면에서는 별도 캐스팅없어도 오류가 발생하지않더라구요 ㅠ 제가 어느부분을 놓친건지 모르겠습니다 ㅠㅠ

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {

    Member save(Member member);
    Optional<Member> findById(Long id);//널일경우 대비
    Optional<Member> findByName(String name);
    List<Member> findAll();

}

package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.springframework.stereotype.Repository;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository{

    private static Map<Long,Member> store = new HashMap<>();
    private static long sequence = 0L;

    @Override
    public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(),member);
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();

    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }

    public void clearStore(){
        store.clear();
    }
}
package hello.hellospring.service;

import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository());
    }
    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
}

답변 2

2

김영한님의 프로필 이미지
김영한
지식공유자

다음 부분을 확인해주세요.

public class MemberService {

private final MemberRepository memberRepository;

public MemberService(MemoryMemberRepository memberRepository){

this.memberRepository = memberRepository;
}

생성자에서 주입 받는 부분을 MemoryMemberRepository -> MemberRepository로 변경해주시면 됩니다.

감사합니다.

hk님의 프로필 이미지
hk
질문자

선생님 답변 너무너무 감사합니다 !! 

감사합니다 선생님 오타 다시 한번 확인 하겠습니다

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. hk님

전체 프로젝트를 압축해서 올려주세요.

감사합니다.

 

hk님의 프로필 이미지
hk

작성한 질문수

질문하기