gpt4 book ai didi

java - 在具有运行时保留的对象上找不到注释

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

好吧,我在这里有点困惑。我正在尝试通过在模型上使用注释来选择“DAO”类:

@Entity
@Table(name="dispatcher")
// use the Kamailio Base DAO for code that supports this annotation
@DAOSelector(dao = DAOBaseKamailio.class)
public class DispatcherSet extends Model {
[...]
}

注解定义如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DAOSelector {
Class<?> dao();
}

我使用以下代码返回正确的“DAO”类:

public static DAOInterface getCorrectDAO(final Object object) throws Exception {
final DAOSelector annotation =
object.getClass().getAnnotation(DAOSelector.class);

if(annotation != null) {
System.out.println("Annotation present: " +
annotation.dao().getName() + " for class " + object.getClass().getName());

final Object dao = annotation.dao().newInstance();
if(!(dao instanceof DAOInterface)) {
throw new Exception("Invalid Base DAO in annotation for entity " +
object.getClass().getName());
}
return (DAOInterface) dao;
}
else {
System.out.println("Annotation not present for class " +
object.getClass().getName());
return new DAOBase();
}
}

但是,当我提供一个 DispatcherSet 对象时,注解总是空的:

10:33:38,498 [INFO] [STDOUT] Annotation not present for class model.DispatcherSet

我是不是漏掉了什么?

编辑:

好的,发现了一些有趣的东西,我在 JBoss 容器中运行这段代码,当我打印出所有注释时:

{{{
$Proxy76
$Proxy708
$Proxy77
}}}

我猜其中一个应该是 DAOSelector 注释的代理实例,所以这可能就是为什么 getAnnotation(DAOSelector.class) 不起作用,检查出来。

编辑2:

不,它们不是 DAOSelector 的实例

最佳答案

我已经解决了这个问题。这是一个类路径问题。我有一只耳朵,里面装着 jar 和 war 。模型在 jar 里,注解在两个 jar 里。

关于java - 在具有运行时保留的对象上找不到注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923860/

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