前言

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. ubuntu升级python版本

    ubuntu升级python版本 # 更新包列表 sudo apt update # 安装 Python 所需的软件包 sudo apt install software-properties-com ...

  2. SQLSTATE[HY000] [2002] Connection refused报错 PHP连接docker容器中的mysql

    Laradock 是基于 Docker 提供的完整 PHP 本地开发环境 在框架中连接 MySQL 时 报错 SQLSTATE[HY000] [2002] Connection refused 主要还 ...

  3. windows 10 平台使用命令行批量获取一个文件夹下所有文件的路径

    1 打开命令行, 定位路径到指定磁盘 2 使用cd命令定位到指定路径 3 输入以下命令, 想要的结果就保存在了filename.txt中 dir /b/s filename.txt 结果:

  4. leetcode - 743

    网络延迟时间 迪杰斯特拉的朴素算法流程: 邻接矩阵的方法 点击查看代码 class Solution { public int networkDelayTime(int[][] times, int ...

  5. 用 PHP 封装的发送邮件类

    点击查看代码 <?php class MailSender { // 发件人邮箱地址 private $fromEmail; // 发件人名称 private $fromName; // 收件人 ...

  6. 【Git】Git GUI的使用

    在Git命令行一文中已经对Git的操作命令进行了简单的介绍,但是理论知识过于枯燥,使得初学者在Git的使用上还是会有很大的困难.虽然我更推荐使用Git Bash方式对Git进行操作,但是对于大部分只是 ...

  7. 【Python】import模块和包

    模块和包 一. 模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块能定义函数,类和变量,模块里也能包含可执 ...

  8. 【Markdown】公式指导手册

    点击跳转至 Cmd Markdown 简明语法手册 ,立刻开始 Cmd Markdown 编辑阅读器的记录和写作之旅! 本文为 MathJax 在 Cmd Markdown 环境下的语法指引. Cmd ...

  9. ChirpStack 设备连通性测试极简工具

    一.工具简介 你是否为调试 ChirpStack 设备数据连通性而烦恼?是否希望快速验证数据解析逻辑而无需复杂部署?这个 ChirpStack 数据连通性测试工具,算是一个极简解决方案! 无论是 Ch ...

  10. Python科学计算系列4—函数和数列极限

    1.数列极限 例1:求下列数列的极限 代码如下: from sympy import * n, k = symbols('n k') f1 = limit(n / (factorial(n) ** ( ...