spring与springboot中,如何在static方法里使用自动注入的属性

这篇博客介绍了如何在Spring框架中使用@PostConstruct注解进行初始化操作,并将其应用于静态变量的注入。通过四个步骤详细阐述了如何在Bean初始化后将自动注入的值赋值给静态变量,以便在静态方法中使用。同时,文章强调了@PostConstruct注解的使用规范,包括方法必须无参数、返回类型为void、不抛出已检查异常以及只能用于非静态方法等限制。

工作笔记

第一步:写注解@Component 使当前类成为一个bean对象。(@Controller,@service都行)
第二步:写个static的变量
第三步:写个@PostConstruct注解注解注释的方法,在这个方法里,将自动注入的值赋值给定义的static变量
第四步:static变量替代自动注入在static方法里面使用

在这里插入图片描述

@PostConstruct注解作用:是Java EE5引入的注解,Spring允许开发者在受管Bean中使用它。当DI容器实例化当前受管Bean时,

@PostConstruct注解的方法会被自动触发,从而完成一些初始化工作。

注意:

只有一个方法可以使用此注释进行注解;
被注解方法不得有任何参数;
被注解方法返回值为void;
被注解方法不得抛出已检查异常;
被注解方法需是非静态方法;
此方法只会被执行一次;

Spring Boot中,静态方法通常不推荐直接使用Spring的依赖注入机制,因为静态方法Spring的IoC容器的生命周期管理不兼容。然而,可以通过以下方式在静态方法中读取`application.properties`文件中的属性值: 1. **使用`@Value`注解结合非静态成员变量** 可以将需要读取的属性注入到一个非静态成员变量中,然后通过静态方法访问该变量。需要注意的是,这种方式依赖于Spring的依赖注入机制,因此类本身必须是一个Spring Bean。 ```java @Component public class PropertyReader { @Value("${property.name}") private static String propertyValue; public static void printPropertyValue() { System.out.println(propertyValue); } } ``` 在上述代码中,`@Value`注解用于将`application.properties`文件中的`property.name`属性注入到静态变量`propertyValue`中。然后,静态方法`printPropertyValue()`可以用来打印该属性值[^1]。 2. **使用`Environment`对象** 可以通过注入`Environment`对象来访问配置文件中的属性值。这种方式适用于需要在静态方法中动态读取多个属性值的情况。 ```java @Component public class PropertyReader { private static Environment environment; @Autowired public PropertyReader(Environment env) { environment = env; } public static void printPropertyValue() { String propertyValue = environment.getProperty("property.name"); System.out.println(propertyValue); } } ``` 在上述代码中,`Environment`对象通过构造函数注入,并赋值给静态变量`environment`。静态方法`printPropertyValue()`通过调用`getProperty()`方法来获取`property.name`属性值[^1]。 3. **使用`@ConfigurationProperties`注解** 如果需要读取一组相关的属性值,可以使用`@ConfigurationProperties`注解来绑定属性值到一个Java类中。然后,通过静态方法访问该类中的属性值。 ```java @Component @ConfigurationProperties(prefix = "property") public class PropertyConfig { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } @Component public class PropertyReader { private static PropertyConfig propertyConfig; @Autowired public PropertyReader(PropertyConfig config) { propertyConfig = config; } public static void printPropertyValue() { System.out.println(propertyConfig.getName()); } } ``` 在上述代码中,`PropertyConfig`类通过`@ConfigurationProperties`注解绑定`property`前缀下的所有属性值。`PropertyReader`类通过注入`PropertyConfig`实例,并将其赋值给静态变量`propertyConfig`,静态方法`printPropertyValue()`通过调用`getName()`方法来获取`property.name`属性值[^1]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微微一笑满城空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值