복붙노트

[SPRING] Spring @Autowired는 bean을 이름 또는 유형별로 주입합니까?

SPRING

Spring @Autowired는 bean을 이름 또는 유형별로 주입합니까?

나는 봄 (wiley press) 서적을 읽고있다. 2 장에는 예제가있다. Java 구성 및 @Autowired에 대해 설명합니다. 이 @Configuration 클래스를 제공합니다.

@Configuration
public class Ch2BeanConfiguration {

    @Bean
    public AccountService accountService() {
        AccountServiceImpl bean = new AccountServiceImpl();
        return bean;
    }

    @Bean
    public AccountDao accountDao() {
        AccountDaoInMemoryImpl bean = new AccountDaoInMemoryImpl();
        //depedencies of accountDao bean will be injected here...
        return bean;
    }

    @Bean
    public AccountDao accountDaoJdbc() {
        AccountDaoJdbcImpl bean = new AccountDaoJdbcImpl();
        return bean;
    }
}

및이 정규 bean 클래스

public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }
    ...
}

코드를 실행하면 작동합니다. 하지만 구성에 같은 유형의 빈을 두 개 정의했기 때문에 예외가 예상됩니다.

나는 다음과 같이 작동한다는 것을 깨달았다.

이 잘못 아닌가? Spring에서 Java 구성을 처리 할 때 버그가 있습니까?

해결법

  1. ==============================

    1.설명서에 설명되어 있습니다.

    설명서에 설명되어 있습니다.

    그래서, 아니, 그것은 버그가 아니며 의도 한 행동입니다. by-type autowiring이 일치하는 하나의 bean을 찾지 못하면 bean id (name)가 fallback으로 사용됩니다.

  2. from https://stackoverflow.com/questions/30360589/does-spring-autowired-inject-beans-by-name-or-by-type by cc-by-sa and MIT license