2014-09-17 6 views
2

저는 꽤 많이 갇혔습니다. 여러분이 도와 주실 수 있기를 바랍니다. 어떻게 든 스프링 컨텍스트를 초기화 할 수 없습니다.스프링 컨텍스트 초기화에 실패했습니다.

@Configuration 
public class CoreConfig { 

    @Bean 
    public TeamService createService(TeamPersistenceService teamPersistenceService) { 
    return new TeamEventHandler(teamPersistenceService); 
    } 
} 

그리고이 하나 :

@Configuration 
@EnableJpaRepositories(basePackages = "de.ktv.persistence.repository", // 
includeFilters = @ComponentScan.Filter(value = { TeamsRepository.class }, type =       FilterType.ASSIGNABLE_TYPE)) 
@EnableTransactionManagement 
public class PersistenceConfig { 

    @Bean 
    public TeamPersistenceService createService(TeamsRepository repository) { 
    return new TeamPersistenceEventHandler(repository); 
    } 
} 

그리고이 테스트에서

내가 그들을 사용하려면 :

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { CoreConfig.class, PersistenceConfig.class }) 
public class CoreIntegrationTest { 

@Autowired 
TeamService teamService; 

@Test 
public void addNewTeamToTheSystem() { 

    //some test 

} 

PersistenceConfig을

나는이 좋은 콩 구성 클래스가 있습니다. 클래스 나는 다른 테스트에서 사용하고 잘 작동합니다. 하지만 어떻게 든 CoreConfig.class와 결합하여 초기화하지 못합니다. 이다

오류가 나는 얻을 :

org.springframework.beans.factory.NoSuchBeanDefinitionException을 : 유형의 어떤 자격 콩은 [de.ktv.core.services.TeamService] 의존성을 찾을 수 없습니다 :에 기대 이 종속성에 대한 후보자는 입니다. 종속성 주석 : {org.springframework.beans.factory.annotation.Autowired @는 (= TRUE 필수)}

내가 어떤 도움/hint.Thanks을 주셔서 감사합니다 정말 것입니다!

+0

테스트에 문제가 있습니까? –

+0

UnitUnderTest (TeamService.class)가 초기화되지 않기 때문에 결국 예. – Robert456

답변

2

동일한 이름을 지정하지 않으면 SpringContext가 @autowired를 바인드 할 수 없습니다. 기본적으로 bean 이름은 메소드 이름과 같을 것이다.이 경우, 그는 다르다 : 2 개의 옵션 : 메소드 이름 변경 또는 속성 이름 추가!

옵션 1

@Bean(name = "teamService") 
public TeamService createService(TeamsRepository repository) { 
return new TeamPersistenceEventHandler(repository); 
} 

옵션 2

@Bean 
public TeamService teamService(TeamsRepository repository) { 
return new TeamPersistenceEventHandler(repository); 
} 

즐기 \ O/

+0

왜 도움이되는지 설명해 주시겠습니까? – talex

+0

동일한 이름을 지정하지 않으면 @autowired를 SpringContext에 바인드 할 수 없습니다. 기본적으로 bean 이름은 메쏘드 이름과 같을 것입니다.이 경우에는 2 가지 옵션이 있습니다 : 메쏘드 이름을 바꾸거나 속성 이름을 추가하십시오 –

+0

저는 항상 autowire use type이 아닌 이름을 사용합니다. – talex

1
@Configuration 
public class CoreConfig { 
    @Autowired 
    private TeamPersistenceService teamPersistenceService; 

    @Bean 
    public TeamService teamService() { 
    return new TeamEventHandler(teamPersistenceService); 
    } 
} 

그리고이 하나

@Configuration 
@EnableJpaRepositories(basePackages = "de.ktv.persistence.repository", // 
includeFilters = @ComponentScan.Filter(value = { TeamsRepository.class }, type =       FilterType.ASSIGNABLE_TYPE)) 
@EnableTransactionManagement 
public class PersistenceConfig { 
    @Autowired 
    private TeamsRepository repository: 

    @Bean 
    public TeamPersistenceService teamPersistenceService() { 
    return new TeamPersistenceEventHandler(repository); 
    } 
} 

그리고이 테스트에서 나는 그들을 사용하고 싶습니다 :

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { CoreConfig.class, PersistenceConfig.class }) 
public class CoreIntegrationTest { 

@Autowired 
TeamService teamService; 

@Test 
public void addNewTeamToTheSystem() { 

    //some test 

} 
관련 문제