Я пытался заставить это работать в течение нескольких дней, но у меня ничего не получалось. Кажется, я не могу правильно привести мой класс к введенному интерфейсу. Я использую Spring 3.0.5.
Есть ли у кого-нибудь полный рабочий пример проекта, в котором используется @DeclareParents? Или эквивалент XML? Я нашел кучу фрагментов в сети, но мне не удалось заставить их работать.
Я впервые пробую введение, но мне очень трудно заставить его работать. Я прочитал документы Spring и AspectJ, а также форумы, но до сих пор не могу заставить это работать. Я думал, что классы / интерфейсы созданы правильно, но когда я пытаюсь преобразовать объект Advised в интерфейс, я получаю ошибку приведения.
Цель:
@Entity @Table(name = "item") public class Item implements java.io.Serializable { private long id; private Integer mainType; private Integer subType; private String brandName; private String itemName; private Date releaseDate; private Date retireDate; private String fileName; private String thumbnailName; private String dimension; private boolean active; private boolean unlocked; private Integer unlockCost; private boolean owned; public Item() { } ... // bunch of getters and setters ... }
Интерфейс:
public interface AbstractBaseEntity { /** * @return the customAttributes */ public Object getCustomAttribute(String name); /** * @param customAttributes the customAttributes to set */ public void setCustomAttribute(String name, Object value); }
Реализация:
public class AbstractBaseEntityImpl implements AbstractBaseEntity { /** * Map of custom attributes that can be mapped for the specific entity */ @Transient protected Map customAttributes = new ConcurrentHashMap(); /** * @return the customAttributes */ public Object getCustomAttribute( String name ) { return customAttributes.get(name); } /** * @param customAttributes the customAttributes to set */ public void setCustomAttribute(String name, Object value) { this.customAttributes.put(name, value); } }
Аспект:
@DeclareParents(value="com.fwl.domain.model.*+", defaultImpl=AbstractBaseEntityImpl.class) public AbstractBaseEntity mixin;
Однако, когда я передаю свой представленный объект методу в качестве параметра Object, проверяя, является ли он экземпляром AbstractBaseEntity, он возвращает false.
public void localize(Object entity, Locale locale) { List cachedFields; if (entity == null) // do nothing return; // check if the entity is already localized if( entity instanceof AbstractBaseEntity) // already localized so nothing to do return; ... ... }
Есть ли способ гарантировать, что введение выполняется правильно? В любом случае, чтобы определить, почему я не могу использовать его как AbstractBaseEntity?
Любая помощь будет принята с благодарностью.
Спасибо,
Эрик