我正在编写自己的小MVC框架,并且我正在尝试集成CDI。 这个概念类似于Spring MVC,有ServletDispatcher和@Controller注释。
使用@Controller映射的类应该是托管bean。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@IndexAnnotated
@RequestScoped
public @interface Controller {
String value() default "";
}
然后,我想从我的应用程序上下文中检索我的库中的Controller类,如
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存在于我的库和项目的main / webapp / WEB-INF / bean.xml
中我错过了什么?是否有可能让库从使用该库的应用程序的上下文中重新启动bean?
我的应用服务器是TomEE
答案 0 :(得分:1)
TomEE支持Java EE 6 / CDI 1.0。
Java EE 7 / CDI 1.1中引入了 javax.enterprise.inject.spi.CDI
。
当容器基于旧版本时,您无法简单地升级规范API。
答案 1 :(得分:0)
感谢TomEE仅支持Java EE6的提示。溶液
.hidden {
display: none;
}