2012-01-19 30 views
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

回答

3

我已經解決了這個問題的實例。這是一個類路徑問題。我的耳朵裏有一個罐子和戰爭。模型在罐子裏,註釋在兩者中都存在。

相關問題