我已经使用Spring Roo创建了一个应用程序(我还是一个新手),并且我希望在实体持久化之后进行一些处理。我已经使用Service和DAO层设置了应用程序。在服务中,我创建了一个名为triggerChange(MyEntity myEntity)的自定义方法。我想保存实体后会调用此方法,但我不知道如何在不修改Roo管理的* ServiceImpl_Roo_Service(不应编辑)的情况下调用该方法。
所以我有一个像这样的代码:
服务:
public class MyEntityServiceImpl implements MyEntityService {
//this is the method I want to invoke inside or after invoking save()
public void triggerChange(MyEntity myEntity) {
...
}
}
服务的方面:
privileged aspect MyEntityServiceImpl_Roo_Service {
...
public void MyEntityServiceImpl.saveMyEntity(MyEntity myEntity) {
myEntityRepository.save(myEntity);
}
}
我如何自定义保存方法?
由于
答案 0 :(得分:4)
感谢Roo,您在Spring应用程序中启用了AspectJ。只需创建一个Aspect(在方法调用之后或之后)
您还可以从 Roo 方面移动方法(.aj)
在STS中从方面类中选择所需的方法(甚至属性),右键单击,重构 - >按下...然后直接按Review-OK或OK(我推荐前者以查看更改) )
另一种方式:在Roo运行时,只需在类中创建一个具有相同签名的方法/属性。 Roo将删除该方面的等价物。
答案 1 :(得分:3)
执行此操作的一种方法是使用JPA或Hibernate事件。
看看这个blog(作者是一个非常活跃的SO用户),它解释了Spring Beans如何用于此类活动。
答案 2 :(得分:0)
我必须在保存方法之后执行一些业务逻辑,就像你想要的那样。
我们要说我必须记录已执行保存操作。为此,我创造了这个方面:
package com.malsolo.aspects;
import org.apache.log4j.Logger;
import com.malsolo.myproject.domain.MyEntity;
aspect MyEntityAspect {
private final Logger logger = Logger.getLogger(MyEntityAspect.class);
pointcut persistEntity() : execution(* MyEntity.persist(..));
public Logger getLogger() {
return logger;
}
after() : persistEntity() {
logger().info("Entity persisted "+thisJoinPoint);
}
}
它写道:
2011-11-30 11:47:27,056 [主要] INFO com.malsolo.aspects.ModifyRolAspect - 实体持久执行(无效 com.malsolo.myproject.domain.MyEntity.persist())
我希望它可以帮到你。
注意: