Я пишу свою небольшую структуру MVC, и я пытаюсь интегрировать CDI. Концепция похожа на Spring MVC, есть аннотации ServletDispatcher и @Controller.Настройка CDI во внешней библиотеке
Классы, сопоставленные с @Controller, должны управляться бобами.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@IndexAnnotated
@RequestScoped
public @interface Controller {
String value() default "";
}
Затем я хочу, чтобы получить класс контроллера в моей библиотеке из контекста приложения, как этот
Object controller = CDI.current().select(controllerClass).get();
Но я получаю
java.lang.ClassNotFoundException: javax.enterprise.inject.spi.CDI
Я добавил зависимость в pom.xml в моя библиотека
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
Это также присутствует в моем проекте, который использует эту библиотеку. Уже пытался изменить область действия, но не повезло.
bean.xml присутствует и в моей библиотеке и проекта на основной/веб-приложение/WEB-INF/bean.xml
Что мне не хватает? Возможно ли иметь библиотеку, которая извлекает компоненты из контекста приложения, использующего эту библиотеку?
Мой сервер приложений TomEE
Сервлеты могут вводить CDI-компоненты. Поэтому, если у вас есть диспетчерский сервлет, просто введите «BeanManager» и используйте это, чтобы получить контекстный экземпляр вашего класса контроллера. Это должно работать с API CDI 1.0. –