问题标签 [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.
java - 在某些情况下抑制 Spring Advice
我有一个方法和关于该方法的建议。当该方法被调用时,建议就会被应用到它上面。
在特殊情况下,当该方法来自另一个方法时,我想禁止在其上应用建议。当methodA()
被调用时methodB()
,我想禁止应用建议methodA()
。这可能吗?
java - 弹簧 AOP。如何为带注释的类中的所有公共方法创建切入点
我需要处理从带有一些注释的类的公共方法抛出的所有异常。我尝试使用 Spring AOP。这是我的记录器:
@Loggable
是我的注释。
然后我在@EnableAspectJAutoProxy
我的配置类中添加了注释。
首先,我尝试注释一些引发异常的方法。它工作得很好,但我怎样才能使这个工作对类中用注释进行@Loggable
注释的所有公共方法起作用?
spring - 为什么从 AspectJ 切换到代理模式会导致“TransactionRequiredException:执行更新/删除查询”不再发生?
我在使用 Spring Data Jpa 和 Hibernate 时遇到问题。
这是我得到的例外:
当我从 AspectJ 模式更改我的事务管理时
到默认代理模式:
该异常不再发生。
以下是按调用顺序排列的方法:
来自MessageRestController
:
来自MessageService
:
来自MessageRepository
:
我非常想知道为什么从AspectJ-mode 切换到 Proxy-mode 会导致异常不再发生。
有人可以建议吗?
编辑:这是服务实现声明:
并从服务接口:
spring - @EnableTransactionManagement(mode = AdviceMode.ASPECTJ) 在 JBOSS 上不起作用
我想将 ASPECTJ 加载时间编织与我的 Spring 数据库事务(在 JBOSS 上运行)一起使用。我已经浪费了一整天的时间,但无法让它正常工作。
我在下面粘贴了我的 Java 代码以及服务器的输出。它应该在数据库中插入 1 条记录,然后回滚,因为我抛出了一个RuntimeException
应用@Transactional
。但是当它运行时,它总是插入记录并提交事务,它从来没有像它应该的那样真正回滚。
你能帮我弄清楚出了什么问题吗?作为参考,这里是 Spring 文档的链接:
- https://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-aj-ltw-spring
- https://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
WEB-INF/jboss-scanning.xml:
aop.xml:
Java代码:
服务器输出:
spring-data - 如何在没有自定义 repo 的情况下在 spring-data 存储库方法“之前”打印一些日志
我有一个 Spring 数据存储库。当调用http://localhost:8080/persons webservice 时,我想记录一些东西。我不想制作 MyCustomRepository<>。更清洁的选择?
回购类:
示例日志:
aspectj - 获取方面的“方法参数”的名称?(方面J)
如何获取方面的参数名称,例如,如果我的方法是 test(Sample sampleDto),我需要知道我的方面的 sampleDto 的名称。如何从 ProceedingJoinPoint 得到它?我试试这个,但我得到了空值。
spring - 使用 AspectJ LTW 在非公共方法的自调用和相关注意事项上允许 spring 代理功能
我已经看到了许多与@Cacheable
、@Transactional
、@Async
等相关的 Spring 功能示例,其中每次都重复相同的选项:
通过代理对象进行的自我调用
ApplicationContext.getBean(MyService.class)
,MyService.class
除了@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS)
,将目标方法重定位到单独的
@Service
类,使用 AspectJ 加载时编织。
虽然前两种方法通常很好,但有时我们需要将上述三个(和其他)注释的功能附加到私有方法,无论是出于代码清晰、设计还是其他原因。
前两种方法的例子很多,但最后一种方法很少。据我了解,由于 AspectJ LTW 的性质,默认情况下,它与通常的 Spring AOP 行为互斥,后者可以@Cacheable
毫不费力地启用等行为。我的问题如下:
是否有任何关于启用上述行为的体面示例,通常使用 AspectJ LTW 使用前两个选项来完成?
有没有办法选择性地启用 AspectJ LTW,例如,不是 for
@Async
和@Transactional
just@Cacheable
?这方面的一个示例用例可能是:由于团队的设计,所有可缓存的方法(其中一些可能是私有的)应该位于一个外观类中,该类调用执行大量计算的私有方法,但可能会更新某些状态(即'last-queried-at: #'
) 在返回到外部调用之前。
这个问题是从spring-boot
用户的角度出发的,但我相信它普遍适用于 Spring AOP 和 AspectJ LTW。如果在这种情况下需要特殊考虑,请纠正我。
java - Spring 4 方法拦截器并使用自定义实现
我有以下类和接口
我没有 Impl1 或 Impl2 的源代码。但是想拦截对 do() 方法的任何调用并使用我自己的实现。同样基于某些条件可能会调用实际的 do() 实现,其他情况它不会委托给原始实现。
请让我知道这是否可以实现。如果是,如何实施?
我正在使用 Spring 4 和 JDK 7。
java - 如何使用 Spring AOP 或 AspectJ 拦截给定方法中的每个方法调用
我想拦截从重写方法 A() 调用的类 Test 的每个方法,并想知道每个方法(如 b()、c())在分别处理一些业务逻辑时花费了多少时间。
如何使用 Spring AOP 或 Aspectj 实现它?