问题标签 [spring-aspects]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
28 浏览

java - 在某些情况下抑制 Spring Advice

我有一个方法和关于该方法的建议。当该方法被调用时,建议就会被应用到它上面。

在特殊情况下,当该方法来自另一个方法时,我想禁止在其上应用建议。当methodA()被调用时methodB(),我想禁止应用建议methodA()。这可能吗?

0 投票
2 回答
7212 浏览

java - 弹簧 AOP。如何为带注释的类中的所有公共方法创建切入点

我需要处理从带有一些注释的类的公共方法抛出的所有异常。我尝试使用 Spring AOP。这是我的记录器:

@Loggable是我的注释。

然后我在@EnableAspectJAutoProxy我的配置类中添加了注释。

首先,我尝试注释一些引发异常的方法。它工作得很好,但我怎样才能使这个工作对类中用注释进行@Loggable注释的所有公共方法起作用?

0 投票
1 回答
199 浏览

spring - 为什么从 AspectJ 切换到代理模式会导致“TransactionRequiredException:执行更新/删除查询”不再发生?

我在使用 Spring Data Jpa 和 Hibernate 时遇到问题。

这是我得到的例外:

当我从 AspectJ 模式更改我的事务管理时

到默认代理模式:

该异常不再发生。

以下是按调用顺序排列的方法:

来自MessageRestController

来自MessageService

来自MessageRepository

我非常想知道为什么从AspectJ-mode 切换到 Proxy-mode 会导致异常不再发生

有人可以建议吗?

编辑:这是服务实现声明:

并从服务接口:

0 投票
1 回答
1908 浏览

spring - @EnableTransactionManagement(mode = AdviceMode.ASPECTJ) 在 JBOSS 上不起作用

我想将 ASPECTJ 加载时间编织与我的 Spring 数据库事务(在 JBOSS 上运行)一起使用。我已经浪费了一整天的时间,但无法让它正常工作。

我在下面粘贴了我的 Java 代码以及服务器的输出。它应该在数据库中插入 1 条记录,然后回滚,因为我抛出了一个RuntimeException应用@Transactional。但是当它运行时,它总是插入记录并提交事务,它从来没有像它应该的那样真正回滚。

你能帮我弄清楚出了什么问题吗?作为参考,这里是 Spring 文档的链接:

WEB-INF/jboss-scanning.xml

aop.xml:

Java代码:

服务器输出:

0 投票
1 回答
37 浏览

spring-data - 如何在没有自定义 repo 的情况下在 spring-data 存储库方法“之前”打印一些日志

我有一个 Spring 数据存储库。当调用http://localhost:8080/persons webservice 时,我想记录一些东西。我不想制作 MyCustomRepository<>。更清洁的选择?

回购类:

示例日志:

0 投票
1 回答
274 浏览

aspectj - 获取方面的“方法参数”的名称?(方面J)

如何获取方面的参数名称,例如,如果我的方法是 test(Sample sampleDto),我需要知道我的方面的 sampleDto 的名称。如何从 ProceedingJoinPoint 得到它?我试试这个,但我得到了空值。

0 投票
1 回答
1358 浏览

spring - 使用 AspectJ LTW 在非公共方法的自调用和相关注意事项上允许 spring 代理功能

我已经看到了许多与@Cacheable@Transactional@Async等相关的 Spring 功能示例,其中每次都重复相同的选项:

  1. 通过代理对象进行的自我调用ApplicationContext.getBean(MyService.class)MyService.class除了@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS),

  2. 将目标方法重定位到单独的@Service类,

  3. 使用 AspectJ 加载时编织。

虽然前两种方法通常很好,但有时我们需要将上述三个(和其他)注释的功能附加到私有方法,无论是出于代码清晰、设计还是其他原因。


前两种方法的例子很多,但最后一种方法很少。据我了解,由于 AspectJ LTW 的性质,默认情况下,它与通常的 Spring AOP 行为互斥,后者可以@Cacheable毫不费力地启用等行为。我的问题如下:

  1. 是否有任何关于启用上述行为的体面示例,通常使用 AspectJ LTW 使用前两个选项来完成?

  2. 有没有办法选择性地启用 AspectJ LTW,例如,不是 for@Async@Transactionaljust @Cacheable?这方面的一个示例用例可能是:由于团队的设计,所有可缓存的方法(其中一些可能是私有的)应该位于一个外观类中,该类调用执行大量计算的私有方法,但可能会更新某些状态(即'last-queried-at: #') 在返回到外部调用之前。

这个问题是从spring-boot用户的角度出发的,但我相信它普遍适用于 Spring AOP 和 AspectJ LTW。如果在这种情况下需要特殊考虑,请纠正我。

0 投票
2 回答
4703 浏览

java - Spring 4 方法拦截器并使用自定义实现

我有以下类和接口

我没有 Impl1 或 Impl2 的源代码。但是想拦截对 do() 方法的任何调用并使用我自己的实现。同样基于某些条件可能会调用实际的 do() 实现,其他情况它不会委托给原始实现。

请让我知道这是否可以实现。如果是,如何实施?

我正在使用 Spring 4 和 JDK 7。

0 投票
1 回答
345 浏览

spring - @Validated 时 @Transactional 不起作用

如果我@Validated向我的服务的接口/实现添加注释,那么该服务不再是事务性的。Stacktrace 显示没有TransactionInterceptor,但我只看到MethodValidationInterceptor. 如果我删除@Validated,那么我当然会看到TransactionInterceptorMethodValidationInterceptor消失。这些方面是否相互排斥?

在此处输入图像描述

在此处输入图像描述

0 投票
2 回答
13121 浏览

java - 如何使用 Spring AOP 或 AspectJ 拦截给定方法中的每个方法调用

我想拦截从重写方法 A() 调用的类 Test 的每个方法,并想知道每个方法(如 b()、c())在分别处理一些业务逻辑时花费了多少时间。

如何使用 Spring AOP 或 Aspectj 实现它?