@GlaIZier

Как правильно объявлять сложные бины?

Здравствуйте, уважаемые разработчики!

Использую спринг недавно, поэтому появился вопрос.
Есть проект, написанный на спринг, использовалась конфигурация через Java.

Класс конфигурации:
@SpringBootApplication
@ComponentScan
public class Application extends SpringBootServletInitializer {
     // ...
    @Bean
    @Primary
    @ConfigurationProperties(prefix = "datasource.one")
    DataSource one() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "datasource.two")
    DataSource two() {
        return DataSourceBuilder.create().build();
    }

   @Bean
    DAO dao(DAOImpl dao) {
        return dao;
    }

    // ...
}


Класс DAOImpl:
@Component
public class DAOImpl implements DAO {

    @Autowired
    @Qualifier("one")
    private DataSource grad;

    @Autowired
    @Qualifier("two")
    private DataSource phone;

    //... сложная бизнес-логика для работы с бд
}


Соответственно, если я хочу внедрить DataSource бины из конфигурации, то я должен объявить класс DAOImpl как компонент, поэтому в runtime в контейнере получается два бина (DAO интерфейс из конфигурации Application и DAOImpl), которые смотрят на одну и ту же реализацию. Как правильно сконфигурировать бины в данном случае?

Спасибо огромное!
  • Вопрос задан
  • 609 просмотров
Решения вопроса 1
zolt85
@zolt85
Программист
Не объявляете бин DAO. Пометьте реализацию DAOImpl аннотацией @Repository.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы