当前位置: 首页 > 知识库问答 >
问题:

工厂定义的bean没有被Micronaut增强

章丰茂
2023-03-14

将@Singleton直接应用于包含@PostConstruct和@Transactional的服务类按预期工作 - 调用@PostConstruct并且事务方法工作正常。

@Singleton
public class MyService {

    @PostConstruct
    public void init() {
       LOG.info("PostConstruct called")
    }

    @Transactional
    public void doSomethingInTransaction() {

    }

}

将bean定义移动到如下所示的@Factory中仍然有效,MyService singleton仍然被创建,但没有得到增强-@PostConstruct未被调用,事务方法将无法工作(无法获取当前线程的事务同步会话)

public class MyService {

    @PostConstruct
    public void init() {
       LOG.info("PostConstruct called")
    }

    @Transactional
    public void doSomethingInTransaction() {

    }

}

@Factory
public class ApplicationConfig {

    @Singleton
    public MyService myService() {
        return new MyService();
    }

}

与Spring相比,这是Micronaut的预期行为吗?是否有任何方法可以指示Micronaut处理在外部Java配置中定义的bean,与在自己的类中定义的bean相同?

注意:我注意到如果我像下面这样添加@TransactionalAdvice,Micronaut会应用事务管理(虽然在html" target="_blank">java doc中声明不应该直接使用它)——但是@PostConstruct还是不行。

@Factory
public class ApplicationConfig {

    @Singleton
    @TransactionalAdvice
    public MyService myService() {
        return new MyService();
    }

}

共有1个答案

毕胡非
2023-03-14

应为该行为。

您可以在创建实例后手动执行init方法

除了工厂方法上的注释之外,我们不会分析工厂返回的类,因为您应该只将工厂用于您无法控制的类(即在第三方 jar 中)。在这种情况下,不应期望这些注释存在,因为如果类是为通过 DI 注入而设计的,那么您就不会使用工厂来创建它。

 类似资料:
  • 我的代码是这样的: 我希望使用类似的依赖注入: 在过去的Spring中,我只需按照以下准则定义bean:http://docs.Spring.io/Spring/docs/3.1.0.m1/spring-framework-reference/html/beans.html#beans-factory-class-statist-factory-method 问题:我能在没有Spring的普通Ja

  • 我需要执行从Micronaut到Spring应用程序的远程调用。为了创建必要的bean,我创建了一个工厂: 在我的Spock集成测试中,我需要模拟这些bean,我根据Micronaut文档进行了尝试:https://docs.micronaut.io/latest/guide/index.html#replaces 这导致了这样的测试: 这个解决方案效果不佳。如果这两个测试是单独运行的,那么这两个

  • 首先要提的是-我把一切都准备好了。我所做的唯一更改是在代码中添加了更多的存储库。 然后我得到: 15:47:58.126[pool-2-thread-4]错误I.M.H.S.Netty.RoutingInboundHandler-出现意外错误:无法为Io.Micronaut.Transaction.Hibernate5.HibernateTransactionManager类的参数[session

  • 2020-09-23T15:28:00.3483912Zjava.lang.IllegalStateExcture:未能加载Application ationContext 2020-09-23T15:28:00.3489821Z引起的原因:org.springframework.beans.factory.不满意依赖异常:创建在文件[/home/run/work/comation-service

  • 问题内容: 我已经用实体管理器配置了两个持久性单元,如下所示: 然后,我将事务管理器配置为 我最初只有一个配置,它被称为“ transactionManager”。Addint一个附加的持久性单元似乎会生成错误。我不明白的一件事,如果我配置了两个持久性单元(每个持久性单元用于一个单独的数据库),是否还需要为每个数据源配置一个单独的实体管理器和一个事务管理器? 我得到的错误如下所示:(我搜索了所有文

  • 我在Maven Webapp项目中设置Spring Security性时遇到问题。每当我在服务器上运行应用程序时,它都会显示以下错误: 现在我知道这个问题已经被问到了,我从昨天开始一直在尝试各种各样的解决方案,但都没有结果。 请注意,Spring Security性。xml和spring数据库。xml位于WEB-INF目录中名为spring的文件夹中,而applicationContext。xml