Java Play.application()的替代方案是什么

Java Play.application()的替代方案是什么,java,playframework,playframework-2.5,Java,Playframework,Playframework 2.5,我是个新手。我想读取conf文件夹中的一个文件。所以我使用了Play.application().classloader().getResources(“Data.json”).nextElement().getFile() 但我知道这出戏,现在这出戏不受欢迎了。我可以用什么来读取文件。 我读了这篇文章,几乎听不懂它在说什么。您读的2.5迁移文章重点介绍了Play从全局状态迁移到依赖项注入,作为连接依赖项的一种手段,因此删除了这些静态方法。如果你还没有真正理解这一点,那么不要担心 假设此配置条

我是个新手。我想读取conf文件夹中的一个文件。所以我使用了Play.application().classloader().getResources(“Data.json”).nextElement().getFile()

但我知道这出戏,现在这出戏不受欢迎了。我可以用什么来读取文件。
我读了这篇文章,几乎听不懂它在说什么。

您读的2.5迁移文章重点介绍了Play从全局状态迁移到依赖项注入,作为连接依赖项的一种手段,因此删除了这些静态方法。如果你还没有真正理解这一点,那么不要担心

假设此配置条目(在application.conf或导入application.conf的其他文件中):-

my_conf_key = "some value"
以下是使用2.5查找配置属性的示例:-

import play.api._
import play.api.mvc._
import javax.inject.Inject

class TestConf @Inject() (conf: Configuration) extends Controller {

  def config = Action {
    Ok(conf.underlying.getString("my_conf_key"))
  }

}
印刷品:-

some value

只需将应用程序注入到需要的类中。假设它位于控制器中:

import play.Application;
import javax.inject.Inject;
import javax.inject.Provider;

class YourController extends Controller {

    @Inject
    Provider<Application> app;


    public Result someMethod() {
        // (...)
        // File is placed in conf/Data.json
        InputStrem is = app.get().classloader().getResourceAsStream("Data.json");
        String json = new BufferedReader(new InputStreamReader(is))
                .lines().collect(Collectors.joining("\n")); 
        return ok(json).as("application/json");    
    }
}
导入play.Application;
导入javax.inject.inject;
导入javax.inject.Provider;
类YourController扩展控制器{
@注入
提供商应用程序;
公共结果方法(){
// (...)
//文件放在conf/Data.json中
InputStrem is=app.get().classloader().getResourceAsStream(“Data.json”);
String json=new BufferedReader(新的InputStreamReader(is))
.lines().collect(收集器.连接(“\n”);
返回ok(json).as(“应用程序/json”);
}
}

Salem为您提供了一个特定用例的示例。在这个示例中,您可以找到有关依赖项注入的更详细解释

这是关于迁移到游戏2.5


我希望这将对您有所帮助。

注入
应用程序
无效,因此我必须注入
环境
,然后调用
环境.resource(“resource.xsd”);

例如:

import javax.inject.Inject;

public class ExampleResource extends Controller{

     private final Environment environment;

     @Inject
     public ExampleResource(Environment environment){
          this.environment = environment;
     }

     public void readResourceAsStream() {
          InputStream resource = environment.resourceAsStream("data.xsd");
          // Do what you want with the stream here
     }

     public void readResource(){
          URL resource = environment.resource("data.xsd");
     }
}
播放有关应用程序界面的文档:

您使用的是哪个版本?您已经用v2.3为帖子添加了标签,但是play.play在2中被弃用了。5@Nio非常感谢。我更正了。我正在使用2.5。你是说我必须将数据添加到配置文件中吗?它正在工作。我想我必须了解依赖注入,才能知道实际发生了什么。有人能给我一个正确的p吗我很想找到这样的解决方案,因为反复阅读文档对我一点帮助都没有。