- 사용자 구성은 일반적인 빈이라면 의존관계를 파악해서 빈 생성 순서를 결정해줌
- 순환 참조 때문에 생성이 불가능한 경우가 아니라면 빈이 정의되는 순서는 특별히 문제가 되지 않음
- 반면 자동 구성의 경우는 순서가 중요한 경우가 있음(다만, 모든 자동구성 순서가 중요한건 아님)
- 일부 자동 구성의 경우 이전에 어떤 자동구성 빈이 등록되었는가를 조건으로 특정 자동 구성을 포함시킬지 여부를 결정할 수 있음
- 또, 이전에 이미 등록된 특정 타입의 빈이 하나만 있다면 이번 자동 구성을 포함시키겠다는 조건을 걸 수도 있음
- @Conditional을 많이 사용하는 자동 구성의 특징
- DataSource가 이미 여러개가 등록되었다면 그 중에 뭘 가져다 JdbcTemplate을 만들 때 사용할지 “자동으로” 결정할 수 없음. 그건 개발자가 수동으로 정의를 해주면 되지만 자동 구성을 이용할 수 없는 상황
- 이런 판단을 하려면 DataSource 자동 구성은 JdbcTemplate 자동 구성보다 앞에서 처리되어야 함
- 또, 이미 어떤 타입의 자동 구성이 이미 적용되었다면 같은 타입의 자동 구성은 등록하지 않겠다. 이런 경우에도 우선순위를 정해서 순서를 지정할 수 있음
- Tomcat의 자동 구성이 다른 조건이 다 맞아서 이미 등록되었다면 Jetty 자동 구성은 무시하게 할 수 있음.
- 우선 순위를 Tomcat → Jetty로 정했다면 이 순서대로 조건을 판단해야 함
- 이렇게 조건부 자동 구성을 위해서 어떤 자동 구성보다 나중에 혹은 이전에 조건을 체크해서 자동 구성 등록 작업을 수행하라는 지정을 할 수 있음
- 또한 부트의 JdbcTempalteAutoConfiguration에는 다음과 같이 애노테이션이 붙어있습니다.
- @AutoConfiguration(after = DataSourceAutoConfiguration.class) → 여기 나오는 after 항목은 해당 자동 구성 뒤에 처리해달라는 순서를 지정하는 것