gpt4 book ai didi

java - Spring的@Transactional注解是否会混淆其他注解

转载 作者:行者123 更新时间:2023-12-04 05:14:51 26 4
gpt4 key购买 nike

我有一个自定义方法注释 (@EventListener),我在具有 @Transactional 注释的类内的方法中使用它。

以下是该类(class)的示例

@Component
@Transactional
public class someClass {

@EventListener
public void someMethod() {

}
}

该类在一个包中包含在上下文文件组件扫描中。在另一个实现 ApplicationContextAware 的类中,我检查类的方法是否有我的 @EventListener 注释。出于某种奇怪的原因,当类中存在@Transactional 时,我的自定义注释丢失了。

这就是我检查方法注释的方式:

公共(public)对象 postProcessAfterInitialization(对象 bean,字符串 beanName)抛出 BeansException {
    System.out.println("SCANNING :::::: " + beanName);

for (Method method : bean.getClass().getMethods()) {

for(Annotation a : method.getAnnotations()) {
System.out.println("\t>>>>> " + a.toString());
}

...

有没有办法使用@Transactional 而不会弄乱它注释的类中的其他方法注释?

编辑:我在发布 Spring - @Transactional - What happens in background? 后发现了这个- 似乎创建了某种代理,这似乎导致我的注释“消失”。有没有办法获得对原始类的引用?

最佳答案

我找到了我的问题的答案并将其发布在这里,以防其他人遇到同样的问题。由于@Transactional 类是代理的,我需要获取原始代理类,所以我添加了以下内容:

    Class clazz;

// if this was proxied by Spring, get the original class name
clazz = AopUtils.getTargetClass(bean);
if(clazz == null) {
clazz = bean.getClass();
}

for (Method method : clazz.getMethods()) {

我使用 AopUtils.getTargetClass 会得到原始类,如果它返回 null 这意味着该类没有被代理所以我只使用 bean.getClass()

关于java - Spring的@Transactional注解是否会混淆其他注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14412502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com