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

在Bean内部调用该方法时,Spring AOP无法正常工作

蒋昊天
2023-03-14
问题内容

我的应用程序中编码了几个方面。除以下内容外,其他所有功能均有效。

Service Interface

package com.enbiso.proj.estudo.system.service;
...
public interface MessageService {
     ...
     Message reply(Message message);
     Message send(Message message);
     ...
}

Service Implementation

package com.enbiso.proj.estudo.system.service.impl;
....
@Service("messageService")
public class MessageServiceImpl implements MessageService {
   ...
   @Override
   public Message reply(Message message) {
        ...
        return this.send(message);
   }

   @Override
   public Message send(Message message) {
         ...
   }
}

Aspect

@Aspect
@Component
public class NewMessageAspect {
    ...
    @AfterReturning(value = "execution(* com.enbiso.proj.estudo.system.service.impl.MessageServiceImpl.send(..))", 
                    returning = "message")
    public void perform(Message message){
       ...
    }
}

当我尝试执行该send方法时,调试点在方面没有受到影响perform。

更新

我做了一些调查,发现当sendreply下面的方法中调用该方法时,这是行不通的

@Autowire MessageService messageService;
...
messageService.reply(message);

但是,如果我调用该方法,messageService.send(message)它将可以正常工作。但是,当Reply方法在内部调用send方法时,它是否也应该调用方面?

我不知道我做错了什么。请帮我。


问题答案:

假设有一个来自 SimplePojo

public class SimplePojo implements Pojo {
    public void foo() {
        this.bar();
    }
    public void bar() {
        ...
    }
}

当我们调用方法时foo(),它会重新调用其中的方法bar()。即使foo()AOP代理调用了该方法,AOP代理bar()也不会涵盖的内部调用

因此,如果没有任何建议附加到该方法bar()上,则最终将导致不被调用

使用AopContext.currentProxy()要调用的方法。不幸的是,这将逻辑与AOP耦合在一起。

public void foo() {
   ((Pojo) AopContext.currentProxy()).bar();
}


 类似资料:
  • 主课 工具类 考试班 输出: 我试图嘲笑util无效的方法调用与do没什么,但不工作。有人能帮我解决吗?我在我们的应用程序中遇到了类似的功能。

  • 问题内容: 我不明白为什么使用此正则表达式该方法返回false; 我是一个字边界的字符! 问题答案: 在Java中,尝试将模式与 整个string 进行匹配。 这是真实的,和。 如果要检查字符串中是否有匹配项,可以使用。在这种情况下,它是Java字符串文字。 API链接 :尝试根据图案匹配整个区域。 什么意思 如此处所用,点是一个正则表达式元字符,表示(几乎)任何字符。是一个正则表达式元字符,表示

  • 计划程序的设置: 和@enableScheduling在类中使用@configuration。 问题是fixedDelay正确工作两次,然后在迭代之间暂停1.5分钟。我在计划注释中尝试过fixedRate或cron,但都没有帮助。 方法在调度任务中的工作时间为100ms,项目有足够的内存,但调度程序的工作速度很慢。

  • 问题内容: 我有一个问题,但我无法解决。 我得到的输出是$ FB和$ F,但是此虚拟字符串仅包含列表中的一个字符串..是否还有其他方法可以完全匹配? 问题答案: 您似乎想查看是否包含一个 单词 。你可以这样做:

  • 问题内容: 尽管我很确定这是昨天或前一天工作的,例如,在IE10中不再起作用。我已经测试了我的浏览器,但是它不再起作用了。还有谁有相同的问题吗?或者,它永远都行不通吗? 问题答案: IE不支持输入type =“ number”,但您可以使用jQueryUISpinner小部件。它非常易于使用,并且具有许多对开发人员友好的API。

  • 问题内容: 因此,我的设置无法按我想要的方式工作。因此,每当我运行该程序时,它就会立即从0变为100。我尝试使用,任务,并尝试了,但没有任何尝试。 这是我的程序: @MadProgrammer这是我尝试做一名摆动工作人员并将每个名称写入文档并更新进度栏的尝试。该程序将达到86%左右并停止运行,永远不会创建完成的文档。该程序将创建一个空白文档。这是我首先创建的SwingWorker对象,这是两种方法