Spring 的 @Service 注解使用到自定义注解上,不生效,有人知道这是为什么么

2022-12-26 13:58:53 +08:00
 chenfang
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Transactional
@Service(value = "AAA")
public @interface TransactionalService {





}

@TransactionalService
public class AService {

    public void save(){
        System.out.println("save");
    }
}

环境:

spring-boot 2.7.6

我自定义了一个注解,然后 @Service(value = "AAA"),接下来使用这个注解, 但是这个 AService 对象的名称是 AService,而不是 AAA

这是哪里有问题?

1699 次点击
所在节点    程序员
8 条回复
Bromine0x23
2022-12-26 14:08:58 +08:00
value 没法这样设置,要在自定义注解上添加一个 value 属性,然后用 @AliasFor 标注
running17
2022-12-26 14:20:40 +08:00
楼上说的对,而且你可以用
```
@AliasFor(annotation = Service.class)
String value() default "AAA";
```
来实现你的需求
urnoob
2022-12-26 15:27:50 +08:00
其实我有个问题 op 和 2l 这种做法有什么场景场景要用的 ? 就为了省一个注解?
xwayway
2022-12-26 17:10:26 +08:00
@urnoob #3 我觉得你说得对,自定义注解应该是对功能的增强,而不是对细节的隐藏,而且这样给了 service 一个 default 值的话,总觉得有点隐患
sulinwork
2022-12-26 17:12:50 +08:00
我这样写是生效的 不知道为啥楼主不行
sulinwork
2022-12-26 17:17:04 +08:00
@sulinwork 抱歉 确实需要
@AliasFor(annotation = Service.class)
String value();
才会生效
chenfang
2022-12-26 17:54:11 +08:00
@xwayway 这个问题倒是没啥场景,只是我在测试注解属性覆盖的时候,发现的一个小问题,只是想搞明白为啥不生效
Bromine0x23
2022-12-26 18:05:14 +08:00
@urnoob @xwayway
value 设置默认值是不妥。
至于组合注解确实很有用,Spring 里面就大量使用,甚至 @Service 本身也是。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/904730

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX