일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 메세지수정
- 외부키
- 적용우선순위
- MySQL
- ㅔㄴ션
- WeNews
- 네이티브쿼리
- 추후정리
- 서브쿼리
- 테스트
- appspec
- 2 > /dev/null
- AuthenticationEntryPoint
- 검색
- application.yml
- subquery
- 예약
- Query
- 포트
- 메소드명
- querydsl
- appspec.yml
- EC2
- 테스트메소드
- foreignkey
- 컨테이너실행
- 커밋메세지수정
- docker명령어
- ubuntu
- 참조키
- Today
- Total
제뉴어리의 모든것
The dependencies of some of the beans in the application context form a cycle 에러 본문
The dependencies of some of the beans in the application context form a cycle 에러
제뉴어리맨 2022. 10. 4. 01:04에러 상황 :
프로젝트를 Run 할때 발생.
에러 내용 :
Description:
The dependencies of some of the beans in the application context form a cycle:
┌─────┐
| securityConfiguration defined in file [클래스의 실 경로]
↑ ↓
| memberService defined in file [클래스의 실 경로]
└─────┘
Action:
Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.
Disconnected from the target VM, address: '127.0.0.1:13089', transport: 'socket'
Process finished with exit code 1
에러 분석 :
빈을 생성하고 주입을 할때, 순 두개의 빈이 순환 형태여서 발생하는 문제.
발생 코드 :
관련 없는 코드의 내용은 지웠다
- MemberService
@RequiredArgsConstructor
@Transactional
@Service
public class MemberService {
private final MemberRepository repository;
private final CustomAuthorityUtil authorityUtil;
private final PasswordEncoder passwordEncoder; // (1) 문제의 주입
:
:
:
}
(1) : 생성자에서 PasswordEncoder를 DI 받고 있다
- SecurityConfiguration
@RequiredArgsConstructor
@Configuration
public class SecurityConfiguration {
private final JwtTokenizer jwtTokenizer;
private final CustomAuthorityUtil customAuthorityUtil;
private final RedisTemplate redisTemplate;
private final MemberService memberService; // (1) 문제의 주입
//비밀번호 암호화를 위해
@Bean // (2) 문제의 빈 등록
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}
(1) : 생성자에서 MemberService를 DI 받고 있다
(2) : PasswordEncoder를 빈으로 등록
에러 원인
만약 MemberService를 먼저 생성한다면, 생성하는 도중에 PasswordEncoder를 필요로 한다.
그래서 PasswordEncoder를 빈으로 등록하는 Configuration 클래스인 Securityconfiguration를 빈으로 등록하기 위해 생성하고 빈으로 등록하려는데 생성자에 MemberService가 인자로 있다.
그렇게 두개의 객체 사이에 순환이 형성된다.
해결 방법
연결 관계를 끊자.
'BugNote' 카테고리의 다른 글
Spring Boot 프로젝트에서 코드상에 application.properties 값 가져 올때 주의 점 (0) | 2022.10.19 |
---|---|
@EnableJpaAuditing과 @SpringBootApplication 을 같이 쓸때, Test에서 발생되는 에러 (0) | 2022.10.10 |
MapStruct와 Lombok 사용시 주의 사항 (0) | 2022.10.02 |
DTO에 @Getter, @Setter 는 꼭 넣어라 (0) | 2022.09.19 |
actual and formal argument lists differ in length 에러 (0) | 2022.09.19 |