Я использую Spring MVC для своего веб-приложения. Мои бобы записаны в " spring-servlet.xml
" файле
Теперь у меня есть класс, MyClass
и я хочу получить к нему доступ с помощью Spring bean.
В spring-servlet.xml
я написал следующее
<bean id="myClass" class="com.lynas.MyClass" />
Теперь мне нужно получить к нему доступ, используя ApplicationContext
ApplicationContext context = ??
Так что я могу сделать
MyClass myClass = (MyClass) context.getBean("myClass");
Как это сделать ??
java
spring
spring-mvc
servlets
LynAs
источник
источник
Ответы:
Просто введите это ..
или реализовать этот интерфейс: ApplicationContextAware
источник
ApplicationContextProvider.java
ответ выглядит наиболее надежным решением этой проблемы.Я думаю, что эта ссылка демонстрирует лучший способ получить контекст приложения где угодно, даже в классе, отличном от bean. Я считаю это очень полезным. Надеюсь, то же самое и с вами. Ниже приведен абстрактный код этого
Создайте новый класс ApplicationContextProvider.java
Добавьте запись в application-context.xml
В случае аннотаций (вместо application-context.xml)
Получите такой контекст
Ура !!
источник
ApplicationContextProvider.getApplicationContext()
метод. Затем, когда приходит время нуждаться в текущем контексте приложения, яApplicationContextProvider appContext = ApplicationContextProvider.getApplicationContext()
@Component
вApplicationContextProvider
конфигурации может избежать вaplication-context.xml
Если вам нужно получить доступ к контексту из HttpServlet, который сам по себе не создается Spring (и поэтому ни @Autowire, ни ApplicationContextAware не будут работать) ...
или
Что касается некоторых других ответов, подумайте дважды, прежде чем сделать это:
... поскольку это не дает вам текущий контекст, а создает для вас еще один его экземпляр. Это означает, что 1) значительный фрагмент памяти и 2) компоненты не используются совместно этими двумя контекстами приложения.
источник
Если вы реализуете класс, экземпляр которого не создается Spring, например JsonDeserializer, вы можете использовать:
источник
ContextLoader.getCurrentWebApplicationContext()
Добавьте это в свой код
Это просто добавит myClass в ваше приложение
источник
на основе ответа Вивека, но я думаю, что было бы лучше:
Запись из метода экземпляра в статическое поле - плохая практика и опасна, если манипулируют несколькими экземплярами.
источник
org.springframework.core.io.ContextResource
интерфейс. Я бы предложил выбрать другое имя для внутреннего класса,ContextResource
чтобы избежать беспорядка.Есть много способов получить контекст приложения в приложении Spring. Они приведены ниже:
Через ApplicationContextAware :
Здесь
setApplicationContext(ApplicationContext applicationContext)
вы получите applicationContextЧерез Autowired :
Здесь
@Autowired
ключевое слово предоставит applicationContext.Для получения дополнительной информации посетите эту ветку
Спасибо :)
источник
Другой способ - внедрить applicationContext через сервлет.
Это пример того, как внедрять зависимости при использовании веб-сервисов Spring.
Альтернативный способ - добавить контекст приложения в ваш web.xml, как показано ниже.
По сути, вы пытаетесь указать сервлету, что он должен искать компоненты, определенные в этих файлах контекста.
источник
Шаг 1. Добавьте следующий код в класс
Шаг 2 : напишите получатель и установщик
Шаг 3 : определите autowire = "byType" в XML-файле, в котором определен компонент
источник
Даже после добавления @Autowire, если ваш класс не является RestController или классом конфигурации, объект applicationContext получал нулевое значение. Пытался создать новый класс с помощью ниже, и он работает нормально:
затем вы можете реализовать метод получения в том же классе в соответствии с вашими потребностями, например, получить ссылку на реализованный класс:
источник
Затем вы можете получить bean-компонент:
Ссылка: springbyexample.org
источник