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

如何使用AspectJ weaver自定义注释生成Spring

贺劲
2023-03-14

在我们的项目中,我们正试图从Spring标准AOP转移到AspectJ,正如在许多类似的地方所解释的那样(我们需要使事务处理成为一些私有和受保护的方法)。

我们已经能够使用标准的Spring注释(如@Transactional)来很好地完成这项工作。但是我们面临的问题是,在我们的项目中,有一些自定义注释(不是自定义方面)是AeyJ无法识别的。例如,我们有一个注释“扩展”@Transactional(仅修改rollbackFor属性):

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.CLASS)
@Transactional(rollbackFor = Exception.class)
public @interface TransactionalWithCheckedException {

}

你知道如何告诉AspectJ也给weaver这个自定义注释吗?有可能吗?如果没有,我是否应该构建扩展Spring方面的自定义方面(即:对于事务性方面)。

欲了解更多信息,aop.xml:

<aspectj>
  <aspects>
    <!-- Aparently no need to explicit declare aspects like the ones used by Spring @Transactional or @Async, they work fine. -->
  </aspects>
<weaver options="-XnoInline -Xreweavable -showWeaveInfo">
  <include within="com.mycompany.myproject..*" />
</weaver>

和Spring的上下文配置文件的一部分:

 <tx:annotation-driven mode="aspectj" />
 <context:load-time-weaver />

共有1个答案

贺福
2023-03-14

首先,Spring@Transactional注释不是元注释,因此它不能用于注释类型。此外,Spring事务代码中没有任何内容支持这种用法。为了支持这种用法,您必须创建一个具有适当切入点的专用方面来标识事务边界的连接点,可能同时支持原始Spring@Transactional注释和您的自定义注释。您还需要为该方面提供一个TransactionAtoriteSource的实现来支持您自己的元数据源,在您的例子中是该接口处理@TransactionalWitCheckedException注释的实现(您感兴趣的点将是TransactionAttribute.rollbackOn(Throwable ex)方法)。然后,您可以使用CompositeTransactionAtoriteSource作为TransactionAtoriteSource的实现,这样您就可以将支持Spring@Transactional注释的元数据源与您的注释结合起来。

总而言之,处理特殊事务属性需要以下两个方面:

  • 一个支持your和Spring注释的具体方面(可能是AbstractTransactionSpect的子类,请参阅AnnotationTransactionSpect以了解实现思想`
  • 处理事务注释的实现。使用CompositeTransactionAttributeSource将对元数据的支持与spring的元数据结合起来(AnnotationTransactionAttributeSource)

 类似资料:
  • 问题内容: 我想使用注释指定以下hbm配置: 我不确定如何使用 我必须在每个实体类中指定吗? 我可以仅在注释下指定类名称吗? 问题答案: 请找到以下我在项目中使用过的相同代码集。

  • 我发现了几个与此相关的(不是重复的)问题,但它们不能让我满意。 我无法理解在哪里以及为什么要使用? 我在一本书中读到了一个自定义注释的示例,但没有详细解释。 myMeth()内的输出与预期一致。 关于这个例子,我有几个问题。 1-如何在此程序中使用和?或

  • 问题内容: 我正在使用JAXB和xjc将XML Schema编译为Java类。我不想手动编辑此生成的类。我有这样的xml模式: xjc生成仅包含对象列表的类。是否有机会省略该类并直接在该类中具有对象列表? 我知道可以通过注释来完成,但是我不知道如何告诉xjc创建此类注释。 感谢您的任何建议! 最好的问候,马库斯 问题答案: Bjarne Hansen为xjc开发了一个插件,可以解决此问题。不幸的是

  • 我正在尝试使用Spring安全注释,如@PreAuthorize和@安全,但我希望评估用户不是在一个角色上,而是他们是否拥有对特定实体的权限,在这种情况下是一家公司。在我的控制器中,我收到一个超文本传输协议请求,其中包含一个firmId作为参数,我想确保这个用户被允许进入这家公司。是否可以使用当前的Spring安全注释?。我正在寻找一个优雅的解决方案,我一直在寻找自定义约束验证器作为jsr303规

  • 本文向大家介绍MyBatis Generator 自定义生成注释的方法,包括了MyBatis Generator 自定义生成注释的方法的使用技巧和注意事项,需要的朋友参考一下 最近做项目,ORM 使用的是 MyBatis,为了偷懒,我自然而然的想到了使用 MyBatis Generator(MBG)来生成数据库表对应的实体代码和 Mapper 代码。于是做了如下的配置(对 MBG 配置不熟悉的同学

  • 我有一个实体类称为和一个仓库声明如下: 自定义存储库的定义如下: 和 下面是另一个堆栈溢出问题中描述的内容:如何向Spring数据JPA添加自定义方法 现在,IntelliJ给了我一个警告: 我尝试将这些注释添加到中,但没有一个成功: 但都不管用。显然有些是错的,但我在试验。正确的注释是什么。 使用,我得到了以下错误: