在spring-data-jpa中建议所有删除和保存方法

时间:2015-07-29 05:49:16

标签: spring spring-boot aspectj spring-data-jpa

我有一个要求,我需要建议所有删除和保存方法,并将删除/保存的记录发送到其他地方。

我正在使用

的JpaRepository
  • 6 x delete
  • 3 x save

基本上我需要建议所有这些方法。问题是每个方法都有不同的方法签名和返回类型,有时接受Long,Object或List。我正在考虑使用方面来实现这一点,但似乎它会很糟糕,因为我目前有4个对象需要审核,它来自4 x 9 = 36个不同的切入点。还有更多这样的东西,所以很快就会有数百个。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我按照@sheltem建议的那样工作了。我使用了EntityListeners。在我的情况下,我需要访问一个spring bean,并且能够这样:

@Component
public class PublishEntityListener {

    private static PublishingService publishingService;

    @Autowired(
            required = true)
    public void setPublishingService(PublishingService publishingService) {
        this.publishingService = publishingService;
    }

    @PostConstruct
    public void init() {
        //Allow the static dependency to be setup post construct as @EntityListeners are no spring managed
    }

    @PostPersist
    public void prePersist(DomainObject<?> entity) {
        publishingService.publish(getTopicName(entity), HttpMethod.POST, entity);
    }

    @PostUpdate
    public void preUpdate(DomainObject<?> entity) {
        publishingService.publish(getTopicName(entity), HttpMethod.PUT, entity);
    }

    @PostRemove
    public void onDelete(DomainObject<?> entity) {
        publishingService.publish(getTopicName(entity), HttpMethod.DELETE, entity);
    }

}