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.";
}
}