Я изучаю сертификацию Spring Core.Некоторые сомнения относительно Java-конфигурации контекста Spring Spring (зависимость)
Я знаю, что весной я могу настроить инъекции зависимостей с использованием 3 пути:
- Конфигурация Java
- Классы аннотаций
- XML конфигурации
У меня есть некоторые сомнения относительно того, как использовать конфигурацию впрыска первого типа.
Например, у меня есть что-то вроде этого:
1) Класс с именем TransferServiceImpl:
public class TransferServiceImpl implements TransferService {
public TransferServiceImpl(AccountRepository ar) {
this.accountRepository = ar;
}
...
...
...
}
Этот класс содержать TransferServiceImpl() конструктор, который принимают AccountRepository объект как input paramether, поэтому AccountRepository - это зависимость, которая должна быть введена в Transf erServiceImpl().
2) Это реализация предыдущего AccountRepository класса:
public class JdbcAccountRepository implements AccountRepository {
public JdbcAccountRepository(DataSource ds) {
this.dataSource = ds;
}
...
...
...
}
Таким образом, конструктор этого класса thake DataSource объект, который должен быть введен в класс JdbcAccountRepository.
Тогда у меня есть конфигурации класса, который содержит конфигурацию инъекции зависимостей:
@Configuration
public class ApplicationConfig{
@Bean public TransferService transferService(){
return new TransferServiceImpl(accountRepository());
}
@Bean public AccountRepository accountRepository(){
return JdbcAccountRepository(dataSoruce());
}
@Bean public DataSource dataSource(){
DataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
...................................
...................................
...................................
}
}
Так что мне кажется, что это работает следующим образом:
У меня есть 2 реализованы бобы по названию TransferServiceImpl и JdbcAccountRepository и класс конфигурации с именем ApplicationConfig.
В классе конфигурации я говорю, что, когда кто-то спросить на завод, чтобы создать TransferService объект автоматически строить его реализация TransferServiceImpl создание и введение автоматически в JdbcAccountRepository в конструктор TransferServiceImpl.
Таким же образом, когда JdbcAccountRepository создается его вводят в DataSource объект в конструктор.
Правильно ли это?
Если это право у меня есть следующие сомнения:
1) в ApplicationConfig класса я также объявить DataSource боб, но я не реализовать этот класс. Является ли это классом, предоставленным Spring, и мне нужно только установить его значения свойств?
2) Когда создаются бобы, определенные в классе ApplicationConfig? При запуске приложения? Я думаю, что в предыдущем примере, если я комментирую конструктор, используя @Bean, он создается как singleton при запуске приложения. Правильно или я что-то упускаю?
Tnx
Tnx, теперь для меня более понятно – AndreaNobili