Spring Boot @RepositoryEventHandler未被调用

时间:2015-09-26 10:14:20

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

我已经设置了@RepositoryEventHandler,并且由于某种未知原因而未被调用。

@Component
@RepositoryEventHandler(User.class)
public class UserEventHandler {

    @Autowired
    private PasswordCrypto passwordCrypto;

    @HandleBeforeSave
    public void handleUserSave(User user) {
        if (user.getPassword() != null && !"".equals(user.getPassword())) {
            user.setPassword(passwordCrypto.encrypt(user.getPassword()));
        }
    }

    @HandleBeforeCreate
    public void handleUserCreate(User user) {
        user.setPassword(passwordCrypto.encrypt(user.getPassword()));
    }
}

存储库:

public interface UserRepository extends CrudRepository<User, Long> {
    Optional<User> findOneByUsername(String username);
}

我的主要班级:

@SpringBootApplication
@EntityScan("de.ihrig.feuerwehr.hydranet.model")
@EnableJpaRepositories
@ComponentScan({
    "somepath",
    "somepath including the UserEventHandler"
})
public class ServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class, args);
    }
}

提前感谢您的帮助,我找不到错误。

1 个答案:

答案 0 :(得分:1)

可能会有一些事情发生。

你的回购没有带@RestResource注释,但我猜这只是一个疏忽。

我猜测评论是正确的,您正在通过单元测试对其进行测试,该测试的入口点不是通过REST API。 handlers仅捕获通过该向量传递的Repo事件。

如果您想捕获任何repo事件,无论入口点如何,那么您想要使用AbstractRepositoryEventListener

Spring Data Rest Events documentation涵盖了这一点。另请参阅listening for repository events in spring boot