阅读(1056) (0)

Micronaut 桥接 Spring AOP

2023-02-23 11:12:56 更新

虽然 Micronaut 的设计是基于编译时的方式,不依赖于 Spring 依赖注入,但在 Spring 生态系统中仍然有很多不直接依赖于 Spring 容器的价值。

您可能希望在 Micronaut 中使用现有的 Spring 项目,并配置要在 Micronaut 中使用的 bean。

您可能还希望利用来自 Spring 的现有 AOP 建议。其中一个例子是 Spring 对带有@Transactional 的声明式事务的支持。

Micronaut 提供了对基于 Spring 的事务管理的支持,而不需要 Spring 本身。只需将 spring 模块添加到您的应用程序依赖项中:

 Gradle Maven 
implementation("io.micronaut.spring:micronaut-spring")
<dependency>
    <groupId>io.micronaut.spring</groupId>
    <artifactId>micronaut-spring</artifactId>
</dependency>

这还需要添加 spring-annotation 模块依赖作为注解处理器:

 Gradle Maven 
annotationProcessor("io.micronaut.spring:micronaut-spring-annotation")
<annotationProcessorPaths>
    <path>
        <groupId>io.micronaut.spring</groupId>
        <artifactId>micronaut-spring-annotation</artifactId>
    </path>
</annotationProcessorPaths>

如果你使用 Micronaut 的 Hibernate 支持,你已经获得了这个依赖,并且 HibernateTransactionManager 已经为你配置好了。

这是通过拦截用 Spring 的 @Transactional 和 TransactionInterceptor 注释的方法调用来完成的。

这里的好处是您可以使用 Micronaut 的编译时无反射 AOP 来声明程序化的 Spring 事务。例如:

使用@Transactional

import org.springframework.transaction.annotation.Transactional;
...

@Transactional
public Book saveBook(String title) {
    ...
}