Eclipse和AspectJ的问题非常烦人。在方面影响的类中的每次更改之后,我需要进行完整的项目重建(清理)。 任何人都知道如何避免这种情况?
package pl.xxx.infrastructure.jdbc;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.DeclareParents;
import org.aspectj.lang.annotation.Pointcut;
import pl.xxx.infrastructure.jdbc.common.UpdateEntityInterface;
@Aspect
public class UpdateEntityAspect {
/**
* Wyszukiwanie wszystkich klas z adnotacją Entity
*/
@Pointcut("within(@javax.persistence.Entity pl.xxx..*)")
public void beanAnnotatedWithEntity() {
}
/**
* Wyszukiwanie wszystkich metod z nazwą rozpoczynającą się od set
*/
@Pointcut("execution(public * set*(..))")
public void setMethod() {
}
/**
* Wyszukiwanie wszystkich pol w momencie zmodyfikacji ich stanu
*/
@Pointcut("set(private * *)")
public void privateField() {
}
/**
* Nadawanie encji dodatkowego interfejsu / wstrzykiwanie dodatkowych pol
*/
@DeclareParents(value = "@javax.persistence.Entity pl.xxx..*", defaultImpl = UpdateEntityInterface.UpdateEntityInterfaceImpl.class)
UpdateEntityInterface updateEntityInterface;
/**
* Kod wstrzykiwany podczas modyfikowania pola encji
*
* @param joinPoint
* @param entity
*/
@Before("beanAnnotatedWithEntity() && privateField() && target(entity)")
public void onSetExecuted(JoinPoint joinPoint, Object entity) {
if (entity instanceof UpdateEntityInterface) {
UpdateEntityInterface updateEntityInterface = (UpdateEntityInterface) entity;
updateEntityInterface._markUpdated(joinPoint.getSignature().getName());
}
}
}
Aspect影响下的类:
package pl.xxx.model.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.apache.commons.lang3.StringUtils;
@Entity
@Table(name="CUSTOMER")
public class Customer implements Serializable {
private static final long serialVersionUID = 9128787620983157104L;
@Id
@SequenceGenerator(name="IdGenerator", sequenceName="SEQ_CUSTOMER", allocationSize=1)
@Column(name="ID", unique=true, nullable=false, precision=15, scale=0)
protected Long id;
@Column(name="FILE_TYPE", length=3)
@CorelatedEnum(IncomingFileType.class)
private String fileType;
}
错误:Customer类型必须实现继承的抽象方法UpdateEntityInterface._getUpdatedFields()Customer.java第17行Java问题
答案 0 :(得分:0)
尝试将您的方面类作为默认的弹簧方面放入其他lib(项目)中。如果你是hava maven项目,你可以按如下方式添加它们
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<configuration>
<aspectLibraries>
<aspectLibrary>
<groupId>...</groupId>
<artifactId>...</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
</plugin>