AbstractApplicationContext vs ApplicationContext

В чем разница между AbstractApplicationContext и ApplicationContext? мы можем называть

context.registerShutdownHook()  

с помощью ApplicationContext?

Я видел это, проходя через пример кода -

public static void main(String[] args) {
    AbstractApplicationContext context =new ClassPathXmlApplicationContext("Beans.xml");
    context.registerShutdownHook();
}

Ответ 1

То же, что и diff между абстрактным классом (AbstractApplicationContext) и интерфейсом (ApplicationContext).

Можно ли вызвать context.registerShutdownHook() с помощью ApplicationContext?

Нет, потому что registerShutdownHook() является частью интерфейса ConfigurableApplicationContext, который не расширяется ApplicationContext

Ответ 2

registerShutdownHook() изящно завершает работу bean и завершение преформы, как вызов методов уничтожения. Это метод, объявленный в интерфейсе ConfigurableApplicationContext, который реализован AbstractApplicationContext и не реализован ApplicationContext. Так что вызов registerShutdownHook() возможен только из объекта AbstractApplicationContext

Ответ 3

registerShutdownHook() не является частью ApplicationContext. Таким образом, мы не можем использовать контекст приложения.

Этот метод можно вызвать с помощью ссылок, используя либо ConfigurableApplicationContext, либо AbstractApplicationContext.

Как методы могут быть вызваны либо из интерфейса, либо из класса, имеющего реализацию. Поскольку мы фактически создаем объект для ClassPaспасибоmlApplicationContext, используя ссылку AbstractApplicationContext.

Разница: ConfigurableApplicationContext - это интерфейс, в котором методы реализованы в классе AbstractApplicationContext.