У кого-нибудь есть пример Spring AOP @DeclareParents?

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

Любая помощь будет принята с благодарностью.

Спасибо,

Эрик

5
задан skaffman 17 May 2012 в 08:57
поделиться