我必须在我的网络应用程序中使用 3 个不同的事务管理器。所以我根据以下内容编写了自己的注释弹簧参考(第 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 中你可以做到这一点。如中所述文档
还可以组合元注释来创建组合注释。例如,Spring MVC 中的 @RestController 注解由 @Controller 和 @ResponseBody 组成。
此外,组合注释可以选择重新声明元注释中的属性以允许用户自定义。当您只想公开元注释属性的子集时,这尤其有用。例如,Spring 的 @SessionScope 注释将范围名称硬编码为会话,但仍然允许自定义 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)