FFL*_*FFL 3 spring jpa aspectj spring-data-jpa
我试图让JPA Entity Listener通过将其标记为@Configurable来了解spring上下文.但是注入的spring bean是null.能够使用相同的技术使JPA实体了解Spring上下文.我使用Spring(core和data-jpa)作为基础设施.有关如何使用JPA Entity Listeners或spring data-jpa实现此目的的任何想法?
@Configurable
@Scope("singleton")
public class AggregateRootListener {
private static Logger log = LoggerFactory.getLogger(AggregateRootListener.class);
@Autowired
private EventHandlerHelper eventHandlerHelper;
@PostPersist
@PostUpdate
public void publishEvents(BaseAggregateRoot aggregateRoot){
log.info(aggregateRoot.getEvents().toString());
aggregateRoot.getEvents().stream()
.forEach(event -> {
eventHandlerHelper.notify(event, aggregateRoot);
log.info("Publishing " + event + " " + aggregateRoot.toString());
});
}
}
Run Code Online (Sandbox Code Playgroud)
和BaseAggregateRoot代码
@Configurable
@Scope("prototype")
@MappedSuperclass
@EntityListeners(AggregateRootListener.class)
public abstract class BaseAggregateRoot extends BaseDomain{
public static enum AggregateStatus {
ACTIVE, ARCHIVE
}
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "aggregateId", column = @Column(name = "ID", nullable = false))})
protected AggregateId aggregateId;
@Version
private Long version;
}
Run Code Online (Sandbox Code Playgroud)
man*_*ish 10
事件监听器机制是JPA概念,由JPA提供程序实现.我不认为Spring会创建事件监听器类实例 - 它们是由JPA提供程序(Hibernate,EclipseLink等)创建的.因此,常规Spring注入不适用于事件侦听器类实例.这篇文章的作者似乎得出了同样的结论.
也就是说,我在JPA事件监听器中使用Spring托管bean.我使用的解决方案是为了在所有不由Spring管理的类中获取Spring bean实例而开发的.它涉及创建以下类:
@Component
public class SpringApplicationContext implements ApplicationContextAware {
private static ApplicationContext CONTEXT;
public void setApplicationContext(final ApplicationContext context)
throws BeansException {
CONTEXT = context;
}
public static <T> T getBean(Class<T> clazz) { return CONTEXT.getBean(clazz); }
}
Run Code Online (Sandbox Code Playgroud)
此类在初始加载时缓存Spring应用程序上下文.然后使用上下文查找Spring托管bean.
然后使用类就这么简单SpringApplicationContext.getBean(FooService.class)
.
所有常见的Spring语义,例如bean生命周期,bean范围和传递依赖关系都得到了解决.
归档时间: |
|
查看次数: |
5471 次 |
最近记录: |