gpt4 book ai didi

Java CDI 拦截器无法使用 WELD 运行 Web 应用程序

转载 作者:行者123 更新时间:2023-11-28 22:33:50 25 4
gpt4 key购买 nike

我创建了一个 Web 应用程序,它使用 Weld-2.2.0 CDI 实现并在 Tomcat-7 上运行。我创建了一个拦截器来记录方法调用。但是当我运行应用程序时,它会绕过拦截器并直接调用方法。

我的拦截器构造如下:

拦截器绑定(bind):

@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface LogMe{

}

拦截器类:

@LogMe
@Interceptor
public class LogInterceptorImpl
{
private static final Logger log = LogManager.getLogger(LogInterceptorImpl.class);

@AroundInvoke
public Object intercept(InvocationContext ctx) throws Exception
{
log.debug("LogInterceptor::intercept");
return ctx.proceed();
}
}

拦截器目标:

@LogMe
public class DefaultAppController extends AbstractBaseController
{
private static final long serialVersionUID = 1L;

public DefaultAppController()
{

}

@Override @LogMe
public void processRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException
{
resp.getWriter().write("Hello, Guest !");
}

}

最后我创建了 beans.xml 文件如下:

<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<interceptors>
<class>x.web.interceptors.LogInterceptorImpl</class>
</interceptors>
</beans>

我还在 context.xml 文件和 web.xml 文件中创建了焊接资源引用(如焊接文档所述。

<Resource name="BeanManager" 
auth="Container"
type="javax.enterprise.inject.spi.BeanManager"
factory="org.jboss.weld.resources.ManagerObjectFactory" />

<resource-env-ref>
<resource-env-ref-name>BeanManager</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
</resource-env-ref>

我尝试了很多选项,包括使用 weld-tomcat-support jar 进行集成,但它们似乎都不起作用。

谁能帮帮我吗?

我是不是遗漏了或做错了什么?

最佳答案

我不认为拦截器在 Java EE 容器之外工作。我想独立的 Weld 只能做 DI 而不能做其他功能。另见这篇文章:Is it possible to use javax.interceptor in a Java SE environment?

关于Java CDI 拦截器无法使用 WELD 运行 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27269482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com