使公共成员访问应用程序

时间:2016-05-06 10:26:02

标签: java properties visibility

我有以下类从属性文件中加载一些字符串:

public class AuthorizationUtils {

  @Inject
  @Named("authorizedcodes")
  private static Properties authorizedcodesProperties;

  private AuthorizationUtils() {
  }

  private static List<String> getAuthorizationStrings(){
    List<String> listAuthorizedStrings = new ArrayList<>();
    String listAuthorizedCodes = authorizedcodesProperties.getProperty("list.authorizedcodes");
    List<String> listAutorizedCodesString = List<String> items = Arrays.asList(listAuthorizedCodes.split("\\s*,\\s*"));
    for(String authorizedCode:listAutorizedCodesString){
       listAuthorizedStrings.add(authorizedcodesProperties.getProperty(authorizedCode));
    }
    return listAuthorizedStrings;
  }
}

它从此属性文件加载属性:

list.authorizedcodes=101,102,103
101=Foo
102=Bar
103=Prop
104=This
105=One
106=Won't
107=Be
108=Retrieved

我尝试将getAuthorizationStrings调用一次,以便可以在应用程序范围内访问已过滤的属性,并优化调用。

到目前为止,我尝试创建一个像这样的静态公共成员:

public static List<String> listAuthorizedStrings = getAuthorizationStrings();

但是这在调试模式下不起作用我每次访问公共成员时都可以看到调用的方法。

问题:如何仅对整个应用程序访问的公共列表进行初始化?

问候。

1 个答案:

答案 0 :(得分:0)

您需要实现lazy loading,它只会在不存在的情况下启动公共成员。这需要一种方法。

private static List<String> listAuthorizedStrings;

public static List<String> GetListAuthorizedStrings() 
{
    if(listAuthorizedStrings== null)
        listAuthorizedStrings= getAuthorizationStrings();

    return listAuthorizedStrings;
}

如果你知道电话GetListAuthorizedStrings(),它只会加载一次文件。这个逻辑也可以用getAuthorizationStrings()方法实现。但在我看来,由于return类型和生成而没有意义。