当前位置: 首页 > 面试题库 >

为什么在同一服务类中未调用拦截器?

宦翔
2023-03-14
问题内容

我想在Java-SE应用程序中使用拦截器,并且将weld作为CDI实现,并且在这里进行测试:

主班:

 public static void main(String[] args) {

    WeldContainer weldContainer = new Weld().initialize();

    Service service = weldContainer.instance().select(Service.class).get();
    service.methodCall();
    service.methodCallNumberTwo();

}

服务等级:

  public class Service {

    @TestAnnotation
    public void methodCall(){

      System.out.println("methodCall...!");
      methodCallNumberTwo();

    }

    @TestAnnotation
    public void methodCallNumberTwo(){

      System.out.println("methodCallNumberTwo...!");

    }

 }

拦截器类:

 @Interceptor
 @TestAnnotation
 public class TestInterceptor {

     @AroundInvoke
     public Object interceptorMethod(InvocationContext invocationContext) throws Exception {

         System.out.println("I'm the TestInterceptor of "+invocationContext.getMethod());

         return invocationContext.proceed();

     }

 }

Aaa和输出:

 I'm the TestInterceptor of public void Service.methodCall()
 methodCall...!
 methodCallNumberTwo...!
 I'm the TestInterceptor of public void Service.methodCallNumberTwo()
 methodCallNumberTwo...!

我的问题

第一:为什么我在调用methodCallNumberTwo()时没有在methodCall()中调用拦截器?

第二:有办法改变吗?

我仅研究拦截器的行为,并且想了解。先感谢您!


问题答案:

不会调用拦截器,因为您是在对象的同一实例上调用它。如果您熟悉EJB,则与在同一对象上调用方法相同,而不是通过EJB上下文调用。

如果您对其进行调试,则会注意到对注入对象的方法调用将通过代理进行。不代理从methodOne到methodTwo的方法调用。



 类似资料:
  • 我正在使用Hibernate为一个小项目实现createDate和lastUpdate时间戳。我使用一个EmptyInterceptor,并根据我在这里找到的建议解决方案重载提供的方法。除非有一点细节,否则这个解决方案很好用。我想添加一列,指示对象是否已经更新。我知道我可以通过简单地比较两个创建和更新的时间戳是否有差异来实现这一点,但是我需要有这个字段来指示有一个更新。 我使用onSave方法,在

  • 问题内容: 我创建了一个RestEASY拦截器,以允许我在Web服务调用完成后在HTTP响应上设置标头值。我的代码看起来像这样… 但是,当我调用服务时,永远不会调用拦截器。我看到webservice调用成功完成,但是拦截器中的任何代码都没有执行过。除了注册拦截器,我还需要做些其他事情吗?是否必须在其他任何地方声明?是否需要包含任何特殊的web.xml参数? 问题答案: 您必须在web.xml的re

  • 问题内容: 我正在使用Java EE 6和Jboss AS7.1,并尝试使用拦截器绑定(来自jboss网站的示例)。 我有一个InterceptorBinding注解: 拦截器: 还有一个豆: 但是拦截器没有被称为。。。 在编写此代码时将调用拦截器: 谢谢你的帮助。 问题答案: 您是否按照参考示例中的说明启用了拦截器? 缺省情况下,bean档案没有通过拦截器绑定绑定的已启用拦截器。必须通过将侦听器

  • 我试图在我的应用程序中配置拦截器,但我无法使其工作。 在我的应用程序配置类中,我以以下方式进行了配置: 拦截器: 有人知道为什么没有被调用吗?

  • 我对Java Swing开发非常陌生,我发现在GUI中使用PropertyChangeListener有一些困难。 所以我有一个Main类,它实现了Property tyChangeListener接口: 然后是LoginFrame类: 正如您在这个LoginFrame类中所看到的,当用户单击JButton时,将执行actionPerformed方法(它可以工作,因为我通过println看到它),

  • 我正在将分布式系统代码库从SOAP(JAX-WS)迁移到gRPC java。我们使用这个代码库来教授远程调用、容错和安全实现。 在JAX-WS体系结构上,有一个可以拦截SOAP消息的拦截器类(称为SOAP处理程序)。您可以在客户端和服务器上配置处理程序。 作为参考,这是JAX-WS上远程调用的完整序列: 客户端-创建端口(存根)并调用远程方法 通过这种方法,我们可以创建处理程序来记录SOAP消息,