Java Annotation and Processor, чтобы пометить метод так, чтобы он мог быть вызван один раз и только один раз?

Мне нужно иметь возможность отмечать методы, чтобы они генерировали исключение RuntimeException, если они вызываются более одного раза.

Я пытаюсь применить некоторую семантику одиночного присваивания, и количество параметров моего класса слишком велико, чтобы поместить в один конструктор, и мне также нужно сделать так, чтобы эти классы JAXB знали, поэтому объекты должны быть изменяемыми, но я хочу применить семантику единственного присваивания.

Я почти уверен, что смогу сделать это с помощью аспектов, но мне бы очень хотелось иметь возможность использовать вместо этого свой собственный процессор аннотаций.

Я знаю, как это сделать с помощью декораторов в Python.

Как мне написать процессор аннотаций, который может перехватывать вызовы аннотированного метода во время выполнения, а не только во время компиляции?

Я думаю, что у меня что-то есть с динамическими прокси, перехватывающими вызовы методов, мне просто нужно выяснить, как интегрировать их с моим обработчиком аннотаций.

Динамические прокси-серверы требуют, чтобы вы использовали интерфейс, что довольно громоздко, у меня сейчас работает CGLib MethodInterceptor , гораздо меньше требований к тому, что перехватывается и оформляется, за счет добавления зависимость.

5
задан 28 October 2011 в 20:08
поделиться