Как добавить аннотацию Java к методам во время выполнения [duplicate]

На основе Comparer GenericTypeTea: мы можем получить большую гибкость, добавив флаги сортировки:

public class MyOrderingClass : IComparer<Order> {  
    public int Compare(Order x, Order y) {  
        int compareDate = x.Date.CompareTo(y.Date);  
        if (compareDate == 0) {  
            int compareOrderId = x.OrderID.CompareTo(y.OrderID);  

            if (OrderIdDescending) {  
                compareOrderId = -compareOrderId;  
            }  
            return compareOrderId;  
        }  

        if (DateDescending) {  
            compareDate = -compareDate;  
        }  
        return compareDate;  
    }  

    public bool DateDescending { get; set; }  
    public bool OrderIdDescending { get; set; }  
}  

В этом сценарии вы должны создать экземпляр как MyOrderingClass явно (а не IComparer), чтобы установить его сортировку свойства:

MyOrderingClass comparer = new MyOrderingClass();  
comparer.DateDescending = ...;  
comparer.OrderIdDescending = ...;  
orderList.Sort(comparer);  
3
задан Epaga 28 January 2011 в 11:04
поделиться

2 ответа

Googling в течение часа или около того этой статьи вверх, который, кажется, полностью отвечает на мой вопрос: используйте ASM . Для записи файлов классов с использованием измененного байт-кода используйте ClassWriter .

Ну, время, чтобы работать, я думаю. :)

4
ответ дан Epaga 18 August 2018 в 21:15
поделиться

На самом деле, это классический прецедент для AspectJ:

declare @method : public * BankAccount+.*(..) : @Secured(role="supervisor")

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

Кроме того, если вы используете Load Time Weaving , вы можете оставить исходную библиотеку jar неизменной, потому что плетение происходит при загрузке класса

Ссылка:

8
ответ дан Sean Patrick Floyd 18 August 2018 в 21:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: