当前位置: 首页 > 知识库问答 >
问题:

Spring AspectJ未在通知前执行

汪思博
2023-03-14

很抱歉,我可能会重复这个问题(正如我在许多其他SO网站上看到的那样),但是,我不确定在这一点上还有什么可以尝试的。

我正在尝试设置一个简单的AspectJ Spring应用程序。一旦我有了一个工作示例,我想创建一个公共库,可以通过注释在我的团队中使用,所以我对使用AspectJ非常感兴趣,因为我认为它可以简化我尝试做的很多事情。

下面是我的代码:

AspectDemoApplication。课堂——我的主要应用起点。我正在初始化一个新的Account对象并调用该方法,希望在运行时看到该方法的建议。

public class AspectDemoApplication {
    public static void main(String[] args) {
        Account acct = new Account();
        acct.sayHello();
    }
}

账户类——保存该方法的服务类。

public class Account {
    public String sayHello() {
        System.out.println("hello from method");
        return "hello";
    }
}

LogAspect。类——我的aspect类,在这里我定义了切入点和建议。

@Aspect
//@Component
public class LogAspect {
    @Pointcut(value = "execution(* com.rob.aspectdemo.Account.sayHello(..))")
    private void logBefore() { }

    @Before("logBefore()")
    public String print() {
        System.out.println("before hello");
        return null;
    }
}

AspectJConfig。类-我的AspectJ配置类。大多数在线资源都使用。xmlhtml" target="_blank">配置,但从EnableSpectProxy上的Javadocs来看,它说它充当相同的函数。

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ComponentScan(basePackages = "com.rob")
public class AspectJConfig {
    @Bean
    public LogAspect getLogAspect() {
        return new LogAspect();
    }
    @Bean
    public Account getAccount() {
        return new Account();
    }
}

build.gradle-我的gradle文件,显示我的依赖项(我可以看到我有aspectjrt.jar在外部库)。

implementation 'org.springframework:spring-core:5.2.7.RELEASE'
implementation 'org.springframework:spring-context:5.2.7.RELEASE'
implementation 'org.springframework:spring-aop:5.2.7.RELEASE'
implementation 'org.aspectj:aspectjrt:1.9.5'
implementation 'org.aspectj:aspectjweaver:1.9.5'
implementation 'org.aspectj:aspectjtools:1.9.5'

我的问题是,当我启动应用程序(调用main()方法)时,它能够在帐户中打印println语句。sayHello()方法,但它不会打印通知中的println。

我试过使用这些在线指南(和许多其他SO链接),但没有用(大多数网站都说了同样的事情):

mkyong

面向方面编程

比尔东

我正在使用IntlliJ v2020.1,即使在这个集成开发环境中,我在我的之前建议旁边有一个符号,上面写着“这个建议不建议任何方法”。但是当我使用集成开发环境的PointCut表达式片段工具时,它说切入点语法是正确的。

任何帮助都将不胜感激!非常感谢。

共有1个答案

长孙嘉
2023-03-14

下面的代码将创建一个Spring应用程序上下文,并从上下文中获取帐户bean

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class AspectDemoApplication {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AspectJConfig.class);
        ctx.registerShutdownHook();
        Account acct = ctx.getBean(Account.class);
        acct.sayHello();
    }
}
 类似资料:
  • 我的应用程序正确接收到通知,但无法显示带有接收信息的通知弹出(如果应用程序打开)。 注意:如果应用程序在后台,则通知将毫无问题地显示。 我以以下方式接收通知: 然后它调用这个(按照我的理解,它应该显示通知): Firebase通知 null 我的问题就出在这条线上 无法显示通知 更新我已经阅读了关于Android通知的更多信息 https://developer.android.com/guide

  • 我使用firebase在iOS中实现推送通知,目标为C。我有方法,根据其描述,当应用程序处于后台且用户点击通知时,以及当应用程序处于前台时,都应该触发该方法。问题是它只能在后台工作(或者当应用程序没有运行时)。我是不是忘了什么?

  • 我们正在使用解析存储聊天消息,我们正在使用解析通知。 对于iOS,我们这样做是为了在Parse的安装表中创建条目…它在parse的安装表中创建条目,我认为这是接收通知所必须的。 我没有收到来自解析的通知,我认为这是没有收到通知的原因… 事实是这样的吗? 有谁能帮我走上正路吗? 更新 现在收到通知但仍有些疑虑。我在用户登录时执行此操作。我有放条件,如果用户没有创建,那么只有创建,否则不。我没有把它加

  • 通知通道的新代码在旧的和最新的奥利奥设备上运行良好,但当我在API 28(android P)设备上测试时,它没有在通知栏中显示通知,这是我用来启动前台通知的行。

  • 问题内容: 我正在使用第一个Android应用程序来使用Google Cloud Messaging(GCM)服务进行推送通知。我已经可以从服务器应用程序成功发送消息,并将消息的内容记录在客户端应用程序的GCMIntentService类中的onMessage事件中。但是,我在设备上看不到任何视觉信息,表明已收到消息。我希望该消息会出现在手机的下拉通知列表中,就像iPhone一样。是否必须手动编码

  • 我正在创建一个应用程序,显示未来日期的通知。为了在将来显示通知,我使用了AlarmManager。 在我的一个活动中单击按钮,我会创建如下通知 以下是我的BootService类代码: 在测试应用程序时,我看到通知显示,问题是特定于启动手机。在上面的代码中,我通过调用LoadAlarmsFromDatabase来重新创建通知 为了处理启动时重新创建警报,我使用了BroadcastRecaver 公