Если ApplicationContext создает экземпляр объекта, реализующий интерфейс org.springframework.context.ApplicationContextAware, экземпляру предоставляется ссылка на этот ApplicationContext. В следующем листинге показано определение интерфейса ApplicationContextAware:

public interface ApplicationContextAware {
    void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
}

Таким образом, бины могут программно манипулировать создавшим их ApplicationContext через интерфейс ApplicationContext или путем приведения ссылки на известный подкласс этого интерфейса (например, ConfigurableApplicationContext, который открывает дополнительную функциональность). Одним из вариантов использования может быть программное получение других бинов. Иногда эта возможность бывает полезной. Однако, в целом, вам следует избегать этого, поскольку способ связывает код со Spring и не следует стилю инверсии управления, при котором взаимодействующие объекты предоставляются бинам в качестве свойств. Другие методы ApplicationContext обеспечивают доступ к файловым ресурсам, возможность публикации событий приложения и доступ к MessageSource. Эти дополнительные возможности описаны в Дополнительные возможности ApplicationContext.

Другой альтернативой получения ссылки на ApplicationContext является автоматическое обнаружение и связывание. Традиционные режимы автоматического обнаружения и связывания constructor и byType могут предоставлять зависимость типа ApplicationContext для аргумента конструктора или параметра устанавливающего метода, соответственно. Для большей гибкости, включая возможность автоматического обнаружения и связывания полей и методов с несколькими параметрами, используйте функции автоматического обнаружения и связывания на основе аннотаций. В этом случае для ApplicationContext производится автоматическое обнаружение и связывание с полем, аргументом конструктора или параметром метода, которые принимают тип ApplicationContext, если поле, конструктор или метод содержат аннотацию @Autowired.

Если ApplicationContext создает класс, реализующий интерфейс org.springframework.beans.factory.BeanNameAware, класс получает ссылку на имя, определенное в связанном с ним определении объекта. В следующем листинге показано определение интерфейса BeanNameAware:

public interface BeanNameAware {
    void setBeanName(String name) throws BeansException;
}

Обратный вызов инициируется после заполнения обычных свойств бина, но до обратного вызова инициализации, например InitializingBean.afterPropertiesSet() или специального init-метода.