2014-09-28 5 views
1

Spring 핵심 시험을 준비 중이며 모의 질문 중 하나에서 매우 혼란스러운 답변을 얻고 있습니다.Spring : @Configuration에 기본 또는 인수가없는 생성자가 없습니다.

@Configuration 
public class ApplicationConfig { 
    private DataSource dataSource; 

    @Autowired 
    public ApplicationConfig(DataSource dataSource) { 
     this.dataSource = dataSource; 
    } 
    @Bean(name="clientRepository") 
    ClientRepository jpaClientRepository() { 
     return new JpaClientRepository(); 
    } 
} 

답변 상태 : 기본 또는 인수가없는 생성자가 없습니다. 디폴트 또는 인수 없음 생성자는 필수입니다. 여기서 dataSource 매개 변수가있는 제공된 생성자는 고려되지 않습니다.

왜 생성자가 필요한지 먼저 이해하지 못합니다. 왜 두 번째 이유는 ApplicationConfig가 좋지 않은 이유입니다.

답변

1

@Configuration은 특히 이상한 짐승입니다. Spring은 빈을 제공하기 전에 의존성 그래프를 만들기 위해이를 분석해야하므로 구성 클래스에 생성자 주입을 사용할 수 없습니다.

0

당신이 응용 프로그램 컨텍스트 위의 구성을 등록하려고하면 그 이유가 분명있을 것입니다 예 :

ApplicationContext applicationContext = 
      new AnnotationConfigApplicationContext(ApplicationConfig.class); 

그것을 찾는 때문에 프레임 워크가 누락 된 기본 생성자에 대해 불평 예외가 발생합니다 리플렉션을 사용하여 구성을 인스턴스화하려고합니다. 더 좋은 방법이 될 것

은은 dataSource 필드를 @Autowired 가지고 :

@Autowired DataSource dataSource; 

없이 생성자는 명시 적으로 정의 된 (즉 암시 적 기본 인수 없음의 생성자를 가짐).

관련 문제