java如何启动时定义并初始化一个全局变量(内存中)
前言
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如何启动时定义并初始化一个全局变量(内存中)的更多相关文章
- Web应用启动时,后台自动启动一个线程(转)
原文:http://blog.sina.com.cn/s/blog_6810dfc20101ipzq.html Web应用启动时,后台自动启动一个线程 (1)前言 前几天,manager问道一个问题: ...
- SpringBoot(十):读取application.yml下配置参数信息,java -jar启动时项目修改参数
读取application.yml下配置参数信息 在application.yml文件内容 my: remote-address: 192.168.1.1 yarn: weburl: http://1 ...
- Web应用启动时,后台自动启动一个线程
(1)前言 前几天,manager问道一个问题:能不能实现类似于cron的后台管理方式.问题解决后,想对这几个问题进行一下简单的总结.以便抛砖引玉!首先简单的提及一下cron. Cron,计划任务,是 ...
- Tomcat启动时自动加载一个类
有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...
- 如何在tomcat启动时自动加载一个类
有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...
- Java项目启动时执行指定方法的几种方式
很多时候我们都会碰到需要在程序启动时去执行的方法,比如说去读取某个配置,预加载缓存,定时任务的初始化等.这里给出几种解决方案供大家参考. 1. 使用@PostConstruct注解 这个注解呢,可以在 ...
- java Web 启动时自动执行代码的几种方式
Web容器启动后执行代码的几种方式,其执行顺序为:4===>5===>1===>2===>3,即指定init-method的Bean开始执行,接着实现spring的Bean后置 ...
- tomcat启动时自动加载一个类 MyServletContextListener
目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一 ...
- 在java项目启动时就执行某操作
在java启动时大概有四种,此处只介绍3种 1.在启动的方法上使用通过@PostConstruct方法实现初始化bean进行操作 2.通过bean实现InitializingBean接口 @Overr ...
- JVM运行时数据区及对象在内存中初始化的过程
JVM运行时数据区 Java虚拟机所管理的内存区域,也称为运行时数据区,分为以下几个运行时数据区,如图所示 程序计数器:当前程序所执行字节码的行号指示器 程序计数器(Program Counter R ...
随机推荐
- ubuntu升级python版本
ubuntu升级python版本 # 更新包列表 sudo apt update # 安装 Python 所需的软件包 sudo apt install software-properties-com ...
- SQLSTATE[HY000] [2002] Connection refused报错 PHP连接docker容器中的mysql
Laradock 是基于 Docker 提供的完整 PHP 本地开发环境 在框架中连接 MySQL 时 报错 SQLSTATE[HY000] [2002] Connection refused 主要还 ...
- windows 10 平台使用命令行批量获取一个文件夹下所有文件的路径
1 打开命令行, 定位路径到指定磁盘 2 使用cd命令定位到指定路径 3 输入以下命令, 想要的结果就保存在了filename.txt中 dir /b/s filename.txt 结果:
- leetcode - 743
网络延迟时间 迪杰斯特拉的朴素算法流程: 邻接矩阵的方法 点击查看代码 class Solution { public int networkDelayTime(int[][] times, int ...
- 用 PHP 封装的发送邮件类
点击查看代码 <?php class MailSender { // 发件人邮箱地址 private $fromEmail; // 发件人名称 private $fromName; // 收件人 ...
- 【Git】Git GUI的使用
在Git命令行一文中已经对Git的操作命令进行了简单的介绍,但是理论知识过于枯燥,使得初学者在Git的使用上还是会有很大的困难.虽然我更推荐使用Git Bash方式对Git进行操作,但是对于大部分只是 ...
- 【Python】import模块和包
模块和包 一. 模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块能定义函数,类和变量,模块里也能包含可执 ...
- 【Markdown】公式指导手册
点击跳转至 Cmd Markdown 简明语法手册 ,立刻开始 Cmd Markdown 编辑阅读器的记录和写作之旅! 本文为 MathJax 在 Cmd Markdown 环境下的语法指引. Cmd ...
- ChirpStack 设备连通性测试极简工具
一.工具简介 你是否为调试 ChirpStack 设备数据连通性而烦恼?是否希望快速验证数据解析逻辑而无需复杂部署?这个 ChirpStack 数据连通性测试工具,算是一个极简解决方案! 无论是 Ch ...
- Python科学计算系列4—函数和数列极限
1.数列极限 例1:求下列数列的极限 代码如下: from sympy import * n, k = symbols('n k') f1 = limit(n / (factorial(n) ** ( ...