前言

java如何启动时定义并初始化一个全局变量(内存中),项目启动时,通过读取配置文件来构建一个实体类对象,然后在之后可以直接使用,而不是每次使用都要进行构建

前置准备

实体类结构

package cn.daenx.demo;

import lombok.Data;
@Data
public class Person {
private String info;
}

配置文件

spring:
profiles:
active: dev test:
name: daen
age: 18

方式一

新建一个类

package cn.daenx.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component; @Component
public class MyTestCom {
private static String name;
private static Integer age; @Value("${test.name}")
public void setName(String name) {
MyTestCom.name = name;
} @Value("${test.age}")
public void setAge(Integer age) {
MyTestCom.age = age;
} @Bean
public Person doInit() {
Person person = new Person();
System.out.println("@Bean初始化");
person.setInfo("姓名:" + name + ",年龄:" + age);
return person;
}
}

使用

package cn.daenx.demo.controller;

import cn.daenx.demo.Person;
import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @RestController
@RequestMapping("/test")
public class TestController {
@Resource
private Person person; @GetMapping(value = "/02")
@ResponseBody
private String req02() {
System.out.println("02");
return person.getInfo();
}
}

方式二

新建一个类

package cn.daenx.demo;
public class GlobalInfo { private static Person person; public static Person getPerson() {
return person;
} public static void setPerson(Person person) {
GlobalInfo.person = person;
} }

新建一个实体类,并实现ApplicationRunner

package cn.daenx.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 AppRunImpl implements ApplicationRunner {
@Value("${test.name}")
private String name; @Value("${test.age}")
private Integer age; @Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("ApplicationRunner初始化");
Person person = new Person();
person.setInfo("姓名:"+name + ",年龄:" + age);
GlobalInfo.setPerson(person);
}
}

使用

package cn.daenx.demo.controller;

import cn.daenx.demo.Person;
import cn.daenx.demo.GlobalInfo;
import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @RestController
@RequestMapping("/test")
public class TestController { @GetMapping(value = "/01")
@ResponseBody
private String req01() {
System.out.println("01");
return GlobalInfo.getPerson().getInfo();
}
}

java如何启动时定义并初始化一个全局变量(内存中)的更多相关文章

  1. Web应用启动时,后台自动启动一个线程(转)

    原文:http://blog.sina.com.cn/s/blog_6810dfc20101ipzq.html Web应用启动时,后台自动启动一个线程 (1)前言 前几天,manager问道一个问题: ...

  2. SpringBoot(十):读取application.yml下配置参数信息,java -jar启动时项目修改参数

    读取application.yml下配置参数信息 在application.yml文件内容 my: remote-address: 192.168.1.1 yarn: weburl: http://1 ...

  3. Web应用启动时,后台自动启动一个线程

    (1)前言 前几天,manager问道一个问题:能不能实现类似于cron的后台管理方式.问题解决后,想对这几个问题进行一下简单的总结.以便抛砖引玉!首先简单的提及一下cron. Cron,计划任务,是 ...

  4. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  5. 如何在tomcat启动时自动加载一个类

    有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  6. Java项目启动时执行指定方法的几种方式

    很多时候我们都会碰到需要在程序启动时去执行的方法,比如说去读取某个配置,预加载缓存,定时任务的初始化等.这里给出几种解决方案供大家参考. 1. 使用@PostConstruct注解 这个注解呢,可以在 ...

  7. java Web 启动时自动执行代码的几种方式

    Web容器启动后执行代码的几种方式,其执行顺序为:4===>5===>1===>2===>3,即指定init-method的Bean开始执行,接着实现spring的Bean后置 ...

  8. tomcat启动时自动加载一个类 MyServletContextListener

    目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一 ...

  9. 在java项目启动时就执行某操作

    在java启动时大概有四种,此处只介绍3种 1.在启动的方法上使用通过@PostConstruct方法实现初始化bean进行操作 2.通过bean实现InitializingBean接口 @Overr ...

  10. JVM运行时数据区及对象在内存中初始化的过程

    JVM运行时数据区 Java虚拟机所管理的内存区域,也称为运行时数据区,分为以下几个运行时数据区,如图所示 程序计数器:当前程序所执行字节码的行号指示器 程序计数器(Program Counter R ...

随机推荐

  1. word 批量制作ppt

    将 Word 文档作为大纲,构建演示文稿 在 Word 文档中,单击"开始". 使用"样式"设置 Word 文档中内容的格式. 突出显示要用作幻灯片标题的内容, ...

  2. [tldr]GO使用正则表达式

    简述如何使用GO调用正则表达式 是否符合条件 使用MatchString方法实现 _, err := regexp.MatchString(regex, str) 提取内容 Compile 第一步需要 ...

  3. 🧠ChatGPT 中文提示语大全【超全 Prompt 用法】- 已分类

    基于 awesome-chatgpt-prompts 进行分类,更方便查找自己所需,炼制适合自己的ChatGPT法宝. 工作 简历写手 我需要你写一份<2年工作经验的前端工程师>的简历,你 ...

  4. Django实战项目-学习任务系统-定时任务管理

    接着上期代码框架,开发第4个功能,定时任务管理,再增加一个学习定时任务表,主要用来设置周期重复性的学习任务,定时周期,定时时间,任务标题和内容,预计完成天数,奖励积分和任务状态等信息. 现实中学习一门 ...

  5. Tauri跨端笔记实战(1) - 从零打造一款跨端的 AI 笔记

    前言 Tauri 跨端笔记实战项目是基于 Notegen 开源项目,本系列深度解析如何运用Tauri框架开发跨平台AI笔记应用.涵盖核心技术选型.架构设计.典型场景开发及常见问题解决方案,通过代码级演 ...

  6. HTTP压缩的过程

      1. 浏览器发送Http request 给Web服务器,  request 中有Accept-Encoding: gzip, deflate.(告诉服务器浏览器支持gzip压缩) 2. Web服 ...

  7. 性能优化之使用HTTP2.0

    HTTP2.0 的优势 配置 测试 怎么查看当前网站http版本 chrome HTTP协议版本检测 Chrome 控制台 window.chrome.loadTimes() { commitLoad ...

  8. 什么是 CSS 设计模式

    这是转载的,先收藏到我的博客园. 什么是设计模式? 曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上:也曾有人这么说,不是设计模式没用,是你还没有到能懂它,会用它的时候. 先来看一下比较官方的 ...

  9. 一款 .NET 开源、免费、轻量级且非侵入性的防火墙软件

    前言 在当今数字化时代,系统服务器网络安全已成为我们日常生活和工作中不可忽视的重要议题.随着网络威胁的日益复杂和多样化,选择一款高效.可靠且易于使用的防火墙软件显得尤为重要.今天大姚给大家分享一款 . ...

  10. Wolfram常用计算

    1.方程与方程组 例1:求解方程 参考表达式: solve x^3 + 2x^2 - 6x + 5 = 0 real 求解所有根 例2:求解方程: 参考表达式: solve ax^2+bx+c=0 注 ...