Что такое "Aware"? Когда следует включать в мое имя класса?

Иногда я нахожу некоторые имена классов, включая "Aware", такие как ApplicationContextAware "и" MessageSourceAware "(spring). Имеет ли это" Aware "какие-либо особые значения или это известное правило?

Ответы

Ответ 1

Это не классы, это интерфейсы. Имя - это просто соглашение о Spring, означающее, что какой-то специальный объект рамки будет введен в этот класс, если он управляется каркасом.

Непосредственно из документов ApplicationContextAware:

Интерфейс, который будет реализован любым объектом, который хочет быть уведомленным о ApplicationContext, в котором он работает.

В этом случае bean, который реализует этот интерфейс, получит ссылку на ApplicationContext, управляющий приложением.

Ответ 2

Добавление прилагательных типа "осведомленный" в конец - это схема именования, часто используемая для интерфейсов Java. Затем это может быть реализовано классами, и в результате получается код, который более свободно читается для людей, например

class Broker implements ApplicationContextAware { /* ... */ }

где довольно легко увидеть, что этот класс является брокером для чего-то, и он знает, как справляться с контекстами приложений. Кроме того, суффикс "Aware" не имеет особого значения с точки зрения Java (компилятора).

Ответ 3

Интерфейсы, которые вы цитируете, представляют собой Spring -специальное соглашение, позволяющее объектам взаимодействовать с контейнером инъекции зависимостей, который их создал. Внедряя интерфейс, класс сигнализирует, что он хочет получить определенную информацию из контейнера и в то же время предоставляет способ передачи этой информации.

Я бы увидел это просто как попытку найти общее имя для интерфейса, предлагающего такую ​​функциональность, не обязательно сильное соглашение с определенным техническим смыслом.

Ответ 4

Концепция осведомленных интерфейсов:

Если мне нужна ссылка на объекты классов spring, таких как XmlBeanFactory, ApplicationContext... В 2 или более классах существует 3 возможных способа.

  • создание 2 BeanFactories в двух классах.
  • создание на одном классе и совместное использование всех необходимых классов.

В первом случае нам не нужно создавать 2 BeanFactories. Во втором случае классы тесно связаны друг с другом.

  1. Если наш класс реализует интерфейс BeanFactoryAware и переопределяет контрактный метод под названием public BeanFactory setBeanFactory(BeanFactory factory), тогда IOC container см. этот специальный интерфейс и вызывает метод setBeanFactory, установив ссылку BeanFactory на это.

В 3. случае выше двух проблем не существует.