MemberService 코드 작성 중 질의
110
작성한 질문수 1
안녕하세요
실습 중 컴파일 오류가 왜 발생하는지 이해가 안되어 질문 남깁니다.
private final MemberRepository memberRepository;
private final EmailSender emailSender;
private final PasswordEncoder passwordEncoder;해당 코드에서 EmailSender와 PasswordEncoder 부분에서 Could not autowire. No beans of 'EmailSender' type found.
컴파일 오류가 발생합니다.
final을 제거하면 컴파일 오류가 발생하지는 않는데요
하지만 github 페이지에 올려주신 소스코드를 보면 현재 영상 시점과 코드 구조가 100% 일치하지는 않지만 스프링 빈 관련 설정을 따로 해준 것 같진 않아보입니다만.. 토비님 영상에서는 오류가 없고 제 코드에서는 컴파일 오류가 나네요.
어떤 시점에 따로 Spring Bean 관련 설정이 되어있는게 있다던가..
아님 제가 빼먹은 부분이 있다면 알려주실 수 있으신가요?
문제가 되는 부분 전체 코드 첨부드립니다.
시간되실 때 확인 부탁드립니다.
감사합니다.
package com.ggne.splearn.application.required;
import com.ggne.splearn.domain.Email;
/**
* 이메일을 발송한다.
*/
public interface EmailSender {
void send(Email email, String subject, String body);
}package com.ggne.splearn.domain;
public interface PasswordEncoder {
String encode(String password);
boolean matches(String password, String passwordHash);
}
답변 2
0
이 에러 메시지는 IntelliJ의 스프링 검증 기능에서 보여주는 것인데요. 이게 상당히 엉망입니다. 도움이 될 때도 간혹 있으나 아무 문체 없는데 에러처럼 보이게 하기도 하죠. 이건 무시하셔도 좋습니다.
강의 예제를 따라하셨고 테스트를 수행했을 때 아무 문제가 없다면 이 경고 메시지는 무시하시거나, 아예 꺼두시는 것이 좋습니다.
0
안녕하세요, 인프런 AI 인턴입니다. jnkim님, 질문 주신 사항에 대해 도와드리겠습니다.
스프링에서 EmailSender와 PasswordEncoder 인터페이스에 대한 컴파일 오류는 해당 타입의 빈이 스프링 컨텍스트에 등록되지 않았기 때문에 발생하는 것입니다. 이 문제를 해결하기 위해서는 이 두 인터페이스의 구현체를 빈으로 등록해야 합니다.
다음과 같은 방법으로 빈을 등록할 수 있습니다:
- 구현체 클래스 만들기:
EmailSender와PasswordEncoder인터페이스를 구현하는 클래스를 작성하고, @Component 어노테이션을 사용하여 빈으로 등록합니다.
import org.springframework.stereotype.Component;
@Component
public class DefaultEmailSender implements EmailSender {
@Override
public void send(Email email, String subject, String body) {
// 이메일 발송 로직 구현
}
}
@Component
public class DefaultPasswordEncoder implements PasswordEncoder {
@Override
public String encode(String password) {
// 패스워드 인코딩 로직 구현
}
@Override
public boolean matches(String password, String passwordHash) {
// 패스워드 매칭 로직 구현
}
}
- 설정 클래스에서 @Bean 사용:
@Configuration어노테이션을 사용하여 설정 클래스를 만들고, @Bean 어노테이션을 사용하여 빈을 등록할 수 있습니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public EmailSender emailSender() {
return new DefaultEmailSender(); // DefaultEmailSender의 인스턴스 반환
}
@Bean
public PasswordEncoder passwordEncoder() {
return new DefaultPasswordEncoder(); // DefaultPasswordEncoder의 인스턴스 반환
}
}
위의 두 방법 중 하나를 사용하여 스프링 빈으로 등록하면, @Autowired를 통해 정상적으로 주입될 것입니다.
실제로 MemberService를 위한 예제나 내용을 다루는 이 유사한 질문을 참고하시면 빈 등록과 관련된 더 많은 정보를 얻을 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
테스트 관련 질문!
0
56
2
N+1 관련해서 질문있습니다.
0
97
3
도메인 모델에서 관계와 규칙을 구분하는 방법
0
85
2
헥사고날 아키텍처에서의 배치, 시큐리티, 비동기 이벤트 처리는 어떻게 하나요?
0
168
2
어댑터에서 도메인에 직접 의존하는 경우에 대해
0
159
2
Member 도메인이 PasswordEncoder를 받는 구조 질문 있습니다.
0
136
2
MemberService와 EmailSender 책임 분리에 대한 질문
0
121
2
NonNullApi를 NullMarked로 대체하라고 합니다.
0
155
2
39. 문서와 코드 다듬기 updateInfo 테스트 질문 있습니다.
0
92
2
Repository Adapter 설계에 대해 피드백을 부탁드립니다
0
121
2
헥사고날 part2 강의 출시 예정일 문의 드립니다.
0
280
2
PT 문의사항
0
114
1
초기 어플리케이션 구동 시 compose.yml 파싱 오류
0
164
2
애플리케이션의 JPA 리턴과 도메인 모델
0
141
2
애그리거트 루트의 하위 도메인들의 depth가 깊어질 때 문의
0
153
2
페이징 처리를 해야한다면 어떻게 해야할까요?
0
209
2
애그리거트의 repository
0
132
2
Domain Expert가 정확히 어떤 역할을 하는 사람인가요?
0
259
1
회원 애플리케이션 서비스 테스트 (1)
0
118
2
정적 팩토리 메서드 관련 질문드립니다!
0
116
2
spotbug + @NonNullApi 로만 Null 방어가 될까요?
0
140
2
required 포트에 관해서
0
99
2
혹시 다음 편은 언제쯤 오픈할까요?
0
179
2
서비스 단위 테스트 코드 작성
0
107
2





