【问题标题】:How to identify the annotation based configured transaction details?如何识别基于注解的配置交易详情?
【发布时间】:2012-07-24 11:44:41
【问题描述】:

当我反编译一个类的源代码时,它在方法中使用了事务。

我看不到配置的交易详情。

class A {

@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public List<Object> getObjects()

{

  // related stuff

}


public List<Student> getStudents()

{

  // related stuff

}


}

现在如果我反编译class A,它不会给我任何提示来区分这两种方法。似乎两者都相同,但事实并非如此;一种是基于注解的方法,一种是没有注解的方法。

是否可以通过反编译来区分这些方法?

【问题讨论】:

    标签: java spring hibernate annotations decompiling


    【解决方案1】:

    是的,如果您使用 AspectJ 编译时编织,您应该能够在您的 @Transactional 类中看到编织事务相关的建议。例如。这是我看到的:

    AnnotationTransactionAspect.aspectOf().ajc$before$org_springframework_transaction_aspectj_AbstractTransactionAspect$1$2a73e96c(this,
    

    但这仅适用于您使用 AspectJ 编译时编织的情况。如果您使用其他一些机制 - Spring AOP 或 AspectJ 加载时间编织,您将看不到增强的字节码

    【讨论】:

    • 那么它根本不做任何静态字节码操作。在运行时,Spring 围绕 @Transaction 注释的 bean 创建了一个 java 动态代理 - 这是一个参考:blog.springsource.org/2012/05/23/…。如果您正在调试,那么在断点处您会看到被引用的 bean 是代理。
    猜你喜欢
    • 2017-03-07
    • 2023-04-01
    • 2019-10-11
    • 2014-07-20
    • 2022-05-27
    • 2018-12-20
    • 2023-03-13
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多