Этот вопрос может показаться неубедительным, но у меня было сомнение, поэтому я хотел его прояснить.Я читаю Ashish Sarin «Начало работы с Spring Framework», и есть этот простой код, который выбирает пружинный бин класса FixedDepositService
package sample.spring.chapter06.bankapp;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import sample.spring.chapter06.bankapp.domain.FixedDepositDetails;
import sample.spring.chapter06.bankapp.service.FixedDepositService;
public class BankApp {
public static void main(String args[]) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath:META-INF/spring/applicationContext.xml");
FixedDepositService fixedDepositService = context
.getBean(FixedDepositService.class);
fixedDepositService.createFixedDeposit(new FixedDepositDetails(1, 0,
12, "someemail@somedomain.com"));
fixedDepositService.createFixedDeposit(new FixedDepositDetails(1, 1000,
12, "someemail@somedomain.com"));
}
}
Теперь FixedDepositService - это интерфейс, а не конкретный класс.Он реализован другим классом с именем FixedDepositServiceImpl, подобным этому
....
@Service(value = "fixedDepositService")
public class FixedDepositServiceImpl implements FixedDepositService {
....
}
Мой вопрос: как работает этот код?Разве класс BankApp не должен извлекать bean-компонент класса FixedDepositServiceImpl вместо класса FixedDepositService, поскольку FixedDepositService является просто интерфейсом и не содержит определений методов, а FixedDepositServiceImpl является классом, который фактически его реализует, и в нем есть вся логика, определенная в нем?