gpt4 book ai didi

java - 使用java反射提取注释值?

转载 作者:行者123 更新时间:2023-12-01 23:15:30 26 4
gpt4 key购买 nike

我有以下类(class)。

我自动连接了 someDao服务等级为@Autowired SomeDao someDao 。我将服务中的逻辑称为someDao.getName(2);

SomeServiceImpl.java

public class SomeServiceImpl{

@Autowired SomeDao someDao
//call dao methods using someDao
}

SomeDao.java

public  interface SomeDao{

String getName(Int id);
}

SomeDaoImpl.java

public class SomeDaoImpl implements SomeDao{

@CustomAnnotation("somevalue")
public String getName(int id){
//logic

}


}

SomeAspect.java

@Around("execution(public * *(..)) && @annotation(com.mycompany.CustomAnnotation)")
public Object procedeNext(ProceedingJoinPoint call) throws Throwable {

//Access annotation value
MethodSignature signature = (MethodSignature) call.getSignature();
Method method = signature.getMethod();
CustomAnnotation myAnnotation = method.getAnnotation(CustomAnnotation.class);
String name = myAnnotation.value();
//here i am expecting name value "somevalue" but it is returning null


}

CustomAnnotation@Retention(RetentionPolicy.RUNTIME) .

在上述方面,String name = myAnnotation.value();应该给我somevalue但它正在给予 null 。有什么建议吗?但如果我保留 @CustomAnnotation("somevalue")在界面中它就给出了值(value)。接口(interface)方法加注解好不好?

最佳答案

这是因为默认的 spring APO 代理从接口(interface)而不是类获取方法。因此,当方法调用是来自接口(interface)而不是类的方法时。

您有多种选择:

1.要么将 xml 配置更改为 <aop:config proxy-target-class="true">它应该可以工作,因为代理将获取类而不是接口(interface)。如果您有多个 xml aop 配置,并且其中之一针对目标类,那么所有这些配置都会执行相同的操作,所以要小心。

2.或者您坚持使用默认值,然后将注释放在界面上。只要您小心注释,效果就非常好。特别是如果您有交易。

3.可能还有其他解决方案,使用方法调用来获取目标类 ClassUtils获取代理接口(interface)背后的类,但我没有深入研究它。

希望这有帮助

关于java - 使用java反射提取注释值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21281470/

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