#spring #jakarta-ee #servlets #dependency-injection
#spring #джакарта-ee #сервлеты #внедрение зависимостей
Вопрос:
Spring поддерживает внедрение javax.ejb.EJB annotations
, подобно тому, как он вводит @Autowired
и другие аннотации для внедрения jsr-220, благодаря классу CommonAnnotationBeanPostProcessor .
Однако внедрение не работает для сервлетов, поскольку сервлет не создается spring.
В этой статье — Spring также вводит сервлеты — не приводится пример использования сервлетов, но утверждается, что это возможно с использованием переплетения аспектов во время компиляции. К сожалению, переплетение во время компиляции для нас не вариант. Возможно ли это сделать во время выполнения? Можно ввести подкласс в сервлет, если это поможет, но я хочу сохранить аннотации EJB, чтобы сервлеты все еще могли быть развернуты в контейнере Java EE.
РЕДАКТИРОВАТЬ: приложение будет развернуто в контейнере Java EE в процессе производства, но я думал об использовании spring для запуска функциональных тестов и для локального развертывания для разработки, чтобы воспользоваться преимуществами горячей загрузки JSP в Tomcat.
Комментарии:
1. Внедрение чего ? «Ввод аннотаций» для меня не имеет особого смысла. В любом случае,
@EJB
в сервлетах должно работать нормально. По крайней мере, в реальном контейнере Java EE (веб-профиль). В простых контейнерах servletcontainers, таких как Tomcat, вам нужно будет поместить, например, OpenEJB поверх него.2. Аннотации для инъекций — аннотации ресурсов, инъекции, EJB.
3. Ах, вы используете Tomcat, как я и предполагал. Ну, взгляните на OpenEJB: openejb.apache.org/3.0/tomcat.html Или используйте вместо этого настоящий контейнер Java EE, например Glassfish. Это бесплатно и публикуется быстрее, чем Tomcat.
Ответ №1:
Вам понадобится контейнер Java EE, например, в Glassfish, который поддерживает внедрение EJB, и помните, что внедрение работает с управляемыми классами, такими как сервлеты, управляемые компоненты и т. Д. (Классы, управляемые контейнерами), Поэтому внедрение ejb в обычные классы потребует от вас использования поиска.