Inicialização de Variáveis Globais em Java na Inicialização da Aplicação

Este guia demonstra como definir e inicializar variáveis globais em Java na inicialização da aplicação, permitindo o acesso a um objeto de entidade construído a partir de um arquivo de configuração, sem a necesidade de recriá-lo a cada uso.

Estrutura da Classe de Entidade


package com.example.demo;

import lombok.Data;

@Data
public class Person {
    private String details;
}

Arquivo de Configuração (application.properties ou application.yml)


spring.profiles.active=dev

config.name=Alice
config.years=30

Método 1: Usando @Bean e @Value

Clasce de Componente para Configuração


package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConfigurationBeans {

    private String appName;
    private Integer appAge;

    @Value("${config.name}")
    public void setAppName(String name) {
        this.appName = name;
    }

    @Value("${config.years}")
    public void setAppAge(Integer age) {
        this.appAge = age;
    }

    @Bean
    public Person initializePerson() {
        System.out.println("Inicializando Person via @Bean...");
        Person person = new Person();
        person.setDetails("Nome: " + appName + ", Idade: " + appAge);
        return person;
    }
}

Classe de Controle para Uso


package com.example.demo.controller;

import com.example.demo.Person;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/data")
public class DataController {

    @Resource
    private Person sharedPerson; // Injeção do PersonBean

    @GetMapping(value = "/getPersonInfo")
    @ResponseBody
    public String getPersonDetails() {
        System.out.println("Acessando informações da Pessoa...");
        return sharedPerson.getDetails();
    }
}

Método 2: Usando ApplicationRunner

Classe para Armazenametno Global


package com.example.demo;

public class GlobalStorage {

    private static Person applicationPerson;

    public static Person getApplicationPerson() {
        return applicationPerson;
    }

    public static void setApplicationPerson(Person person) {
        GlobalStorage.applicationPerson = person;
    }
}

Implementação de ApplicationRunner


package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class AppInitializer implements ApplicationRunner {

    @Value("${config.name}")
    private String configName;

    @Value("${config.years}")
    private Integer configYears;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("Executando ApplicationRunner para inicialização...");
        Person person = new Person();
        person.setDetails("Nome: " + configName + ", Idade: " + configYears);
        GlobalStorage.setApplicationPerson(person);
    }
}

Classe de Controle para Uso


package com.example.demo.controller;

import com.example.demo.Person;
import com.example.demo.GlobalStorage;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/data")
public class DataController {

    @GetMapping(value = "/getGlobalPerson")
    @ResponseBody
    public String getGlobalPersonDetails() {
        System.out.println("Acessando informações da Pessoa via GlobalStorage...");
        Person person = GlobalStorage.getApplicationPerson();
        if (person != null) {
            return person.getDetails();
        }
        return "Dados da pessoa não inicializados.";
    }
}

Tags: java Spring Boot inicialização variáveis globais application runner

Publicado em 6-18 06:08