Tut Spring @Autowired injizieren Bohnen vom Namen oder vom Typ?

Lese ich Anfang Frühjahr (wiley press) Buch. In Kapitel 2 gibt es ein Beispiel
über die Java-Konfiguration und @Autowired. Es stellt diese @Configuration Klasse

@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;
    }
}

und das regelmäßige bean-Klasse

public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

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

Wenn ich den code, es funktioniert. Aber ich erwartete eine Ausnahme, weil ich habe 2 Bohnen mit dem gleichen Typ in der Konfiguration.

Erkannte ich, dass es funktioniert wie folgt:

  • wenn der Frühling trifft auf mehrere beans mit der gleichen Art überprüft Feld name.
    • wenn es findet eine bean mit dem Namen des Ziel-Feld, es spritzt, die bean in das Feld ein.

Ist das nicht falsch? Ist es ein bug im Frühling, den Umgang mit der Java-Konfiguration?

InformationsquelleAutor Lidovic | 2015-05-20
Schreibe einen Kommentar