Seguinte… tenho uma classe que uso como base de minhas entidades
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
private static final long serialVersionUID = -2430361920868494692L;
@Id
@GeneratedValue
private Long id;
e gostaria de usar Spring AOP para registrar ela em uma outra classe. Meu aspecto está definido da seguinte forma:
@Aspect
public class EntityRegister {
@Autowired
private Session session;
@Pointcut("execution(* model.AbstractEntity.new(..) )")
public void register() {}
@AfterReturning("register()")
public void putInSession(AbstractEntity entity) {
session.register(entity);
}
}
minha dúvida é como faço para obter a instancia criada por new…
Opa,
se estiver tentando criar um aspecto para interceptar instanciação, bad news: o Spring não suporta isto nativamente. Vai ter de usar o AspectJ com o compilador e tal.
aproveitando o gancho…
tenhos aspectos em minha aplicação, porém preciso adicionar um parametro pro agent na vm, fiz isso através da ide, existe a possibilidade de colocar essa conf em outro lugar, para nao ter de configurar o ambiente de todos os devs? tipo um plugin do maven?
abrassss
e se eu fizer algo assim??
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
private static final long serialVersionUID = -2430361920868494692L;
@Id
@GeneratedValue
private Long id;
protected AbstractEntity() { kmenrtoeirngfdkjnvkdjnbdlknbfdklnbk(); }
public Long getId() {
return id;
}
AbstractEntity kmenrtoeirngfdkjnvkdjnbdlknbfdklnbk() { return this; }
void setSessionId(Long sessionId) {
this.sessionId = sessionId;
}
}
e isso
@Aspect
@Component
public class EntityRegister {
private static Long sessionIdSequence = 0L;
private Session session = Session.getInstance();
@AfterReturning(pointcut = "execution(* model.AbstractEntity.kmenrtoeirngfdkjnvkdjnbdlknbfdklnbk(..) )", returning="entity")
public void putInSession(AbstractEntity entity) {
System.out.println("aeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee tá passandooooooooooooooooo");
entity.setSessionId(sessionIdSequence++);
session.register(entity);
}
}
funcionaria??? eu tentei desse jeito mas parece que não está interceptando… no meu applicationContext está assim:
<aop:aspectj-autoproxy />