java在外部库中设置CDI
我正在编写自己的小MVC框架,并尝试集成CDI。 这个概念类似于Spring MVC,有ServletDispatcher和@Controller注释
用@Controller映射的类应该是托管bean
@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>
它也出现在我的项目中,使用这个库。已经尝试将范围更改为提供,但没有成功
豆子。xml存在于我的库和main/webapp/WEB-INF/bean上的项目中。xml
我错过了什么?甚至有可能从使用这个库的应用程序的上下文中检索bean吗
我的应用服务器是TomEE
# 1 楼答案
感谢TomEE只支持JavaEE6的提示。解决方案
# 2 楼答案
TomEE支持JavaEE6/CDI1.0
javax.enterprise.inject.spi.CDI
是在JavaEE7/CDI1.1中引入的当容器基于旧版本时,不能简单地升级spec api