Ответ 1
Аннотации классов не могут быть унаследованы подклассами.
Что вы можете сделать, так это "заставить" подкласс использовать аннотацию во время компиляции:
Есть ли способ, чтобы классы наследовали аннотации из суперкласса?
например.
@ApplicationException(rollback=true)
public abstract class AbstractBeanActionException extends Exception {
/* method body is simply calls to super() */
}
public class OrderBeanException extends AbstractBeanActionException {
/* does this class have to be annotated as well ? */
}
Аннотации классов не могут быть унаследованы подклассами.
Что вы можете сделать, так это "заставить" подкласс использовать аннотацию во время компиляции:
Если вы сами определяете свои классы аннотаций, вы можете использовать @Inherited мета-аннотация:
Указывает, что тип аннотации автоматически унаследован. Если в объявлении типа аннотации присутствует унаследованная мета-аннотация, а пользователь запрашивает тип аннотации в объявлении класса, а объявление класса не имеет аннотации для этого типа, то суперкласс класса автоматически запрашивается для типа аннотации.
Аннотации не наследуются. Но структура, использующая аннотацию (в данном случае EJB3), может выбирать перемещение по иерархии классов, чтобы увидеть, существует ли она в суперклассе.
Посмотрите на javadoc этой аннотации: он имеет свойство inherited
, которое точно указывает, следует ли также применять эту аннотацию к подклассы или нет.
Аннотации классов не могут быть унаследованы подклассами, но аннотации для нечастных не-конструкторных методов-членов и полей наследуются вместе с методом/полем, с которым они связаны. Поэтому вы можете попробовать использовать их для достижения желаемого эффекта.
Когда класс помечен аннотацией, которая сама аннотируется с помощью java.lang.annotation.Inherited, вы можете запросить аннотации, которые относятся к классу, а Inherited должны отображаться в результатах.
ApplicationException не помечено как Inherited. Хорошо.