当前位置: 首页 > 面试题库 >

如何扩展Spring注释@Transactional

蔡鹏程
2023-03-14
问题内容

我必须在Web应用程序中使用3个不同的事务管理器。因此,我根据Spring参考(第10.5.6.3节“自定义快捷方式注释”)编写了自己的注释。

一个注释(用于使用一个特定的transactionmanager)如下所示:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.transaction.annotation.Transactional;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional("customer")
public @interface CustomerTX{


}

使用自定义的@CustomerTX批注对我的服务层进行批注时,一切工作正常。但是我必须为注释提供更多选项,例如readonly =
true,rollbackFor =等。由于您不能“扩展”注释(我真的只需要从Spring扩展@Transactional注释),对此的正确实现是什么?


问题答案:

恐怕您将必须创建几个自定义注释,每个用例都@Transactional需要一个注释,并为每个注释添加所需的确切注释。

或者,您将不得不在AspectJ中编写自己的方面(org.springframework.transaction.aspectj.AbstractTransactionAspect从spring-
aspects.jar 扩展)以创建自己的事务逻辑



 类似资料:
  • 在我的项目中,我使用预定义的注释: 的源代码: 我想编写自定义注释,它将与使用(Secure.class)的

  • 我希望能够利用Spring Boot datasource自动配置。但是,它并不支持我使用的所有特性,特别是。 有关等的更多信息,请参见:https://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html

  • Extensions can be registered declaratively via @ExtendWith, programmatically via @RegisterExtension, or automatically via Java’s ServiceLoader mechanism. 5.2.1. Declarative Extension Registration Deve

  • 问题内容: 我不明白为什么Java注释中没有继承关系,就像Java类一样。我认为这将非常有用。 例如:我想知道给定的注释是否为验证者。通过继承,我可以自反地浏览超类,以了解此注释是否扩展了。否则,我该如何实现? 那么,谁能给我这个设计决定的理由? 问题答案: 关于未采用这种方式进行设计的原因,你可以在JSR 175设计常见问题解答中找到答案,其中说: 你为什么不支持注释子类型化(一种注释类型扩展了

  • 问题内容: 我正在尝试扩展Python,以用于越野比赛的结果。我想从格式为string的对象构造一个对象。我可以使用工厂设计模式和注释来完成此操作。我将如何通过覆盖和/或完成相同的任务? 使用下面的代码,构造一个对象会引发TypeError。请注意,未调用,因为未打印。 这是错误: 如果将代码从移至,则会得到以下结果。注意这次,输出显示我的函数被调用了。 问题答案: 显然,对象是不可变的,这意味着

  • 我有以下类 : 我想按如下方式使用它: 因此,通过扩展已经注入依赖项的超类,我希望在其子类中访问它。 我尝试了许多不同的方法,甚至将超类作为组件: 但是,<code>仍然是这样。fetchApi为,即使在超类中也是如此。