может ли spring вводить EJB в аннотированные поля сервлета в веб-приложении Java SE?

#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 в обычные классы потребует от вас использования поиска.