我正在将一个很小的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; }
}
答案 0 :(得分:2)
在Micronaut中,可以使用io.micronaut.core.io.ResourceLoader
变体,例如io.micronaut.core.io.scan.ClassPathResourceLoader
或io.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");
答案 1 :(得分:0)
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"
我创建了: