gpt4 book ai didi

java - 如何扩展 Spring 注解 @Transactional

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:33 27 4
gpt4 key购买 nike

我必须在我的网络应用程序中使用 3 个不同的事务管理器。所以我根据Spring reference写了自己的Annotation (第 10.5.6.3 节自定义快捷方式注释)。

一个注释(用于使用一个特定的事务管理器)如下所示:

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 注释),正确的实现是什么?

最佳答案

在 spring 4 中你可以做到这一点。如 documentation 中所述

也可以组合元注释来创建组合注释。例如,Spring MVC 中的@RestController 注解由@Controller 和@ResponseBody 组成。

此外,组合注解可以选择性地重新声明元注解中的属性以允许用户自定义。当您只想公开元注释属性的一个子集时,这会特别有用。例如,Spring 的 @SessionScope 注解将作用域名称硬编码为 session ,但仍允许自定义 proxyMode。

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Scope(WebApplicationContext.SCOPE_SESSION)
public @interface SessionScope {

/**
* Alias for {@link Scope#proxyMode}.
* <p>Defaults to {@link ScopedProxyMode#TARGET_CLASS}.
*/
@AliasFor(annotation = Scope.class)
ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS;

}

关于java - 如何扩展 Spring 注解 @Transactional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3607803/

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