Disponibilizar propriedades Java entre classes?

Eu escolhi pegar o arquivo de propriedades para personalizar algumas configurações. Eu uso o código a seguir para disponibilizar um objeto de propriedades em uma classe

Properties defaultProps = new Properties();
    try {
        FileInputStream in = new FileInputStream("custom.properties");
        defaultProps.load(in);
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

Tenho que adicionar isso a todas as aulas? Provavelmente não, porque todas as classes abririam um fluxo para esse arquivo. Mas não tenho certeza de como lidar com isso corretamente. Devo fazer uma classe MyPropertiese instanciar em qualquer classe que precise de propriedades?

Desde já, obrigado!

Resposta 1

Por que não usar um ResourceBundle estático?

static final ResourceBundle myResources = 
          ResourceBundle.getBundle("MyResources", currentLocale);
Resposta: 2

Há muito pouca informação para determinar qual seria a melhor maneira de lidar com isso. Você pode expô-lo usando um acessador ou passá-lo para cada classe que exige. Como alternativa, você pode obter as propriedades que cada classe precisa e passar seus valores para o construtor da classe.

Resposta: 3

Carregue as propriedades uma vez usando e armazene as Propriedades de alguma maneira que outras classes possam extrair. Se essa é uma classe MyProperties que faz referência a uma variável estática em algum lugar adequado.

Resposta: 4

Este é um caso especial de disponibilizar qualquer coisa globalmente. Usar métodos estáticos é muito ruim. Uma solução melhor, porém ruim, é usar o padrão sigleton . Testar é o maior problema aqui. IMHO, a melhor maneira é usar a injeção de dependência , embora possa ser um exagero para pequenas aplicações.

Resposta: 5

Como essas informações são estáticas em todas as instâncias, recomendo implementar a Propertiesclasse como um singleton . Usando o método de static bloqueio de inicialização , você pode carregar o arquivo automaticamente quando o programa é iniciado.

public class Properties {
  static {
    try {
      FileInputStream in = new FileInputStream("custom.properties");
      load(in);
      in.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  protected static void load(FileInputStream in) {
    // existing load functionality here
  }
}

Você ainda precisará de um mecanismo de armazenamento interno e um mecanismo de acesso. Estes também devem ser marcados static.

Resposta: 6

Eu tenho um programa Java que analisa vários arquivos de entrada diferentes. Mesmo quando um erro é encontrado nesses arquivos de entrada, a análise ainda pode continuar e coletar vários outros erros também. Então, o que eu quero ...

Estou tentando executar um PURGE com HttpUrlConnection como este: private void callVarnish (URL da URL) {HttpURLConnection conn = null; tente {conn = (HttpURLConnection) url.openConnection (...

Eu tenho trabalhado em uma tarefa na qual preciso ler palavras de um arquivo e encontrar a palavra mais longa e verificar quantas subpalavras contêm nessa palavra mais longa? isso deve funcionar para todas as palavras ...

Estamos no processo de migração do MySql para o MariaDB devido a motivos de licenciamento / uso comercial. Substituímos com êxito o jar do conector MySql pelo jar do cliente MariaDB (primeira alteração) e estamos ...