Этот вопрос может обнажить мое отсутствие знаний об AspectJ, но здесь все равно идет:)
Я успешно использовал Spring Roo и Database Reverse Engineer для создания нескольких таблиц в новом проекте Roo. Я хотел бы иметь возможность сохранить в Roo аспект Roo-Engineering, не «проталкивая» свои аспекты в простые старые классы Java. Однако у меня возникла проблема с назначением значений полям-членам, определенным в Aspect.
Например, у меня есть класс сущностей RooDbManaged, назовем его X, и Roo сгенерировал аспект: X_Roo_DbManaged. Теперь я хочу настроить установщик для поля «updateDate», чтобы я мог назначить дату текущей в момент сохранения. Итак, я поместил свой пользовательский код в класс X следующим образом:
</p>
<pre><code> public void setUpdateDate(Date updateDate) {
this.updateDate = new Date();
}
Это заставляет Roo удалить сеттер из аспекта, как я и ожидал, потому что теперь я определил его в X.
Это дает мне ошибку:
Поле X.updateDate не отображается
Если я изменю видимость поля в аспекте X_Roo_DbManaged на 'public' (что я бы предпочел не делать), это решит проблему, пока Roo автоматически не сгенерирует аспект, вызывающий повторение ошибки.
Полагаю, я упускаю что-то настолько очевидное, что никто не посчитал целесообразным публиковать сообщения, поскольку мой обычно успешный поиск в Google не смог найти никакого решения для этого!
Я должен добавить, что мой обходной путь - настроить соответствующие методы из X_Roo_Controller, переместив их в XController и назначив дату там с помощью неизмененного установщика. Кажется, это противоречит интуиции, так как мне бы очень хотелось, чтобы updateDate всегда была текущей датой, когда она установлена. Интересно, что сгенерированная Roo аннотация @Temporal (TemporalType.TIMESTAMP) в поле updateDate не предоставляет эту функциональность. Мне бы очень хотелось иметь возможность сообщить Roo с помощью команды Roo, что некоторые поля DBRE должны иметь такое поведение и не должны беспокоиться о том, что по сути является «слесарным делом».