java - Java中如何重用没有框架的实例?

标签 java

我使用browscap-java在我的项目中。但初始加载时间太长。

final UserAgentParser parser = new UserAgentService().loadParser();

加载代码耗时约22058ms。

这是我的代码:

 public String[] getAgentInfo() {
    final UserAgentParser parser;
    try {
        parser = new UserAgentService().loadParser();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    } catch (ParseException e) {
        e.printStackTrace();
        return null;
    }
    final String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36";
    final Capabilities capabilities = parser.parse(userAgent);
    final String[] agentInfo = new String[6];

    agentInfo[0] = capabilities.getBrowser();
    agentInfo[1] = capabilities.getBrowserType();
    agentInfo[2] = capabilities.getBrowserMajorVersion();
    agentInfo[3] = capabilities.getDeviceType();
    agentInfo[4] = capabilities.getPlatform();
    agentInfo[5] = capabilities.getPlatformVersion();

    return agentInfo;
}

每次使用这个函数都会初始化parser 。但是parser是不变的,所以我想知道如何重用parser ,使 parser仅在第一次初始化。

PS:该代码适用于java web。

最佳答案

您可以在此方法之外初始化/构建解析器并将其作为参数传递。这将使您能够灵活地初始化解析器一次并通过传递已初始化的解析器多次调用此方法。

public UserAgentParser createUserAgentParser() {
    final UserAgentParser parser;
    try {
        parser = new UserAgentService().loadParser();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    } catch (ParseException e) {
        e.printStackTrace();
        return null;
    }
    return parser;
 }

 public String[] getAgentInfo(final UserAgentParser parser) {

    final String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36";
    final Capabilities capabilities = parser.parse(userAgent);
    final String[] agentInfo = new String[6];

    agentInfo[0] = capabilities.getBrowser();
    agentInfo[1] = capabilities.getBrowserType();
    agentInfo[2] = capabilities.getBrowserMajorVersion();
    agentInfo[3] = capabilities.getDeviceType();
    agentInfo[4] = capabilities.getPlatform();
    agentInfo[5] = capabilities.getPlatformVersion();

    return agentInfo;
}

关于java - Java中如何重用没有框架的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53911510/

相关文章:

java - 在 java pojo 中将相同的 json 字段设置为不同的属性

java - 如何检查字符串是否不等于对象?

Java System.getProperty( "user.timezone") 不起作用

java - 无法构造 `class name` 的实例(尽管至少在 Creator 上存在)

java - 如何删除 URL 中的应用程序名称? Tomcat + httpd

java - 对包含列表的集合进行排序

java - Google reCaptcha 验证握手异常

java - 使用 JAXB&MOXy 将 JPA 实体转换为 XML 并再次转换回来

java - 如何在获取依赖项的方法之间进行选择?

java - 编写一个程序,允许用户输入一个字符串,然后打印该字符串中的字母,并用逗号分隔