【问题标题】:Is there an equivalent for Springs Resource in Micronaut?Micronaut 中的 Springs 资源是否有等价物?
【发布时间】:2019-04-21 13:08:16
【问题描述】:

我正在将一个小型 Spring Boot 应用程序迁移到 Micronaut 1.0.1,我想知道是否有 org.springframework.core.io.Resource 的等效项及其实现,例如 ClasspathResource

在 Spring Boot 中,我使用其构造函数将资源注入服务。

@Service
public class MyService() {

    private final Resource resource;

    public MyService(Resource resource) { this.resource = resource; }
}

如何在 Micronaut 中做到这一点?

@Singleton
public class MyService() {

    private final Resource resource;

    @Inject
    public MyService(Resource resource) { this.resource = resource; }
}

【问题讨论】:

    标签: java micronaut


    【解决方案1】:

    在 Micronaut 中,您可以使用 io.micronaut.core.io.ResourceLoader 变体,例如 io.micronaut.core.io.scan.ClassPathResourceLoaderio.micronaut.core.io.file.FileSystemResourceLoader。获得它们的一种方法是通过io.micronaut.core.io.ResourceResolver

    ClassPathResourceLoader loader = new ResourceResolver().getLoader(ClassPathResourceLoader.class).get();
    Optional<URL> resource = loader.getResource("classpath:foo/bar.txt");
    

    【讨论】:

      【解决方案2】:

      我使用了io.micronaut.core.io.ResourceLoader。通过构造函数连接:

      @Controller("root")
      public class MyController {
      
          private final ResourceLoader loader;
      
          public MyController(ResourceLoader loader) {
              this.loader = loader;
          }
      
          @Get("/index")
          @Produces(MediaType.TEXT_HTML)
          public String greet() throws IOException {
              return new String(loader.getResourceAsStream("index.html").get().readAllBytes());
          }
      }
      

      我的index.html 的路径:src/main/resources/index.html

      【讨论】:

        【解决方案3】:

        ResourceLoader 效果很好,但你可以做得更好。在 Micronaut 中,您可以使用 io.micronaut.core.io.Readable。大致相当于Spring的Resource。您还可以在ConfigurationProperties 中使用Readable,从而将您的配置yaml/properties 直接绑定到Readable 属性:

        micronaut:
          application:
            name: Demo
        images:
          image-file: "classpath:images/bismarckia-nobilis.jpg"
          # image-file: "file:/path/to/images/bismarckia-nobilis.jpg"
          other-files:
            - "classpath:images/bismarckia-nobilis.jpg"
            - "classpath:images/bamboo.jpg"
            - "classpath:images/hibiscus.jpg"
        

        我已经创建了:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-29
          • 2013-06-21
          • 2014-01-09
          • 2012-02-18
          • 2014-05-02
          • 1970-01-01
          相关资源
          最近更新 更多