Если 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-метода.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ