Как используется метод refre sh () в AbstractApplicationContext (Spring)? Почему при использовании refre sh () теряется одноэлементная область действия bean-компонента? - PullRequest
0 голосов
/ 11 апреля 2020

Использовал приведенный ниже код для проверки работы метода refre sh () в AbstractApplicationContext. Но обнаружил, что из-за refre sh область видимости синглтона бобов теряется. Запутался, что именно происходит после вызова синглтона.

Используемый код:

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

        HelloWorld obj1 = (HelloWorld) context.getBean("helloWorld");
        obj1.setMessage("Object 1...");
        obj1.getMessage();

        context.refresh();
        obj1.getMessage();

        HelloWorld obj2 = (HelloWorld) context.getBean("helloWorld");
        obj2.getMessage();

        context.refresh();

        obj1.getMessage();
        obj2.getMessage();
    }

XML Конфигурация:

<bean id="helloWorld" class="com.vinaymitbawkar.HelloWorld"
        init-method="init" destroy-method="destroy">
</bean>

Выход:

init method
Your Message : Object 1...
destroy method
init method
Your Message : Object 1...
Your Message : null
destroy method
init method
Your Message : Object 1...
Your Message : null

Почему это происходит? Почему синглтонная область видимости здесь теряется, а obj2 возвращает ноль?

1 Ответ

0 голосов
/ 11 апреля 2020

Документация для refresh гласит:

Загрузить или обновить sh постоянное представление конфигурации, которое может представлять собой файл XML, файл свойств или схему реляционной базы данных.

Это довольно запутанный способ сказать, что refre sh на самом деле загружает или перезагружает ваши конфигурации applicationcontext / bean из вашего. xml файла или java config. Если это помогает, думайте об этом как о создании «нового» контекста приложения.

Итак, ваша сфера не теряется. Скорее у вас есть перезагруженный appcontext, который возвращает вам «новый» синглтон-бин, для которого не установлено сообщение. Следовательно, вы получаете ноль.

...