ApplicationContext и поиск бобов - PullRequest
       7

ApplicationContext и поиск бобов

1 голос
/ 26 февраля 2011

Я читаю документацию Spring и наткнулся на фрагмент текста, который заставил меня задуматься.

Вы используете getBean () для получения экземпляров ваших бинов. Интерфейс ApplicationContext имеет несколько других методов для получения bean-компонентов, но в идеале код вашего приложения никогда не должен их использовать. Действительно, в коде вашего приложения не должно быть вызовов метода getBean () вообще, и, таким образом, вообще нет зависимости от API-интерфейсов Spring.

Ну, я настроил bean-компоненты в своем XML-файле. Но мне все еще нужно вернуть их в случае необходимости. Как я могу сделать это без метода getBean ()? Чем более подробное объяснение, тем лучше.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2011

Вам нужен какой-то способ извлечения бинов Spring, когда вы хотите получить к ним доступ из классов, которые не были созданы Spring, например, основного класса в программе командной строки, и для этого вы используете методы getBean.* Но самим бинам Spring действительно не нужна эта функция, потому что Spring обязан предоставлять другие необходимые бины через аргументы конструктора или методы установки (это основная идея внедрения зависимостей ).

0 голосов
/ 26 февраля 2011

Некоторое время назад я написал некоторый универсальный синтаксический анализатор, который мог обрабатывать разные форматы входных файлов.

class XmlFormat extends Format {
    // format stuff
    // ...
}

class Parser {
    Format format;

    public Parser(Format format) {
        this.format = format;
    }

    // parsing goes here
    // ...
}

Затем я сказал Spring, какое описание формата должно было использоваться.(Отказ от ответственности: ваш конфиг Spring может иметь совсем другой стиль.)

<bean id="forma1" class="com.mycompany.XmlFormat" />

<bean id="parser" class="com.mycompany.Parser">
    <constructor-arg ref="format1">
</bean>

Так что теперь, когда я хотел, чтобы Spring дал мне Parser, он ввел XmlFormat в конструктор для меня.

0 голосов
/ 26 февраля 2011

Основная идея - «не звоните нам, мы позвоним вам», это означает, что ваш код не запрашивает контейнер контейнера Spring IOC (Inversion of Control), а контейнер вводит компоненты вваш код.Инъекции настраиваются либо с использованием файла (ов) xml-конфигурации, либо с помощью аннотаций.Для получения дополнительной информации см., Например, this и this .Также я бы рекомендовал прочитать всю главу 3 из справочного руководства (как вы, вероятно, делаете).

Интерфейс ApplicationContext по-прежнему позволяет программно запрашивать bean-компоненты, что может потребоваться в некоторых особых случаях.Например, при интеграции с каким-либо другим фреймворком или чем-то подобным.

...