Я пытался заставить это работать в течение нескольких дней и терпел неудачу в этом. Кажется, я не могу правильно привести свой класс к представленному интерфейсу. Я использую 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?
Любая помощь будет принята с благодарностью.
Спасибо
Эрик