6
好的,我在這裏有點困惑。我試圖通過對模型的註釋選擇「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 {
[...]
}
這裏是註釋defenition:
@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:38498 [INFO] [STDOUT]註釋不存在類model.DispatcherSet
我失去了一些東西在這裏?
編輯:
OK,發現了一些有趣的事情,我在這段代碼運行在JBoss容器內,當我打印出所有的註釋:
{{{
$Proxy76
$Proxy708
$Proxy77
}}}
其中一個應該是一個代理實例DAOSelector
註釋我猜,所以這可能是爲什麼getAnnotation(DAOSelector.class)
不起作用,檢查出來。
EDIT2:
不,他們不是DAOSelector