[英]Java CDI interceptor not working web application with WELD
我創建了一個使用Weld-2.2.0 CDI實現並在Tomcat-7上運行的Web應用程序。 我創建了一個攔截器來記錄方法調用。 但是,當我運行該應用程序時,它會繞過攔截器並直接調用方法。
我的攔截器構造如下:
攔截器綁定:
@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,而不能做其他功能。 另請參見此文章: 是否可以在Java SE環境中使用javax.interceptor?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.