静态变量的属性注入

本文探讨了如何在Spring框架下实现对静态变量的依赖注入(IOC)。通过实例解析,详细解释了静态变量注入的过程和应用场景,帮助开发者理解这一特性在实际开发中的作用。
Static静态变量无法直接注入,如下方式可注入
---方式1@Component
public class A{
   
   
    private static B b;
    @Autowired
    private void setB(B b){
   
   
        A.b= b;
在 Java 中,由于静态变量加载要早于 Spring 初始化,不能直接使用 `@Value` 注解对静态变量进行注入。不过,可以通过以下两种常见的方式实现静态属性的 `@Value` 注入: #### 方式一:使用 setter 方法 ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class JwtUtils { // 声明静态变量 private static String secretKey; /** * 静态变量注入 * 从配置文件读取 jjwt.key 属性 * 注入 key,set 方法不能是 static * @param secretKey */ @Value("${jjwt.key}") public void setSecretKey(String secretKey) { JwtUtils.secretKey = secretKey; } } ``` 这种方式的核心是使用一个非静态的 setter 方法,在该方法上使用 `@Value` 注解,通过这个方法为静态变量赋值。 #### 方式二:使用 `@PostConstruct` 注解 ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Component public class StaticValueExample { // 通过 @Value 注解拿到配置文件中的具体值 @Value("${config.value}") private String a; // 要对外提供使用的静态属性 private static String B; // 静态方法获取 B 的值 public static String getB() { return B; } // 在 spring 容器启动的时候执行,初始化 B 变量的数据 @PostConstruct public void init() { B = a; } } ``` 此方式中,使用 `@PostConstruct` 注解修饰一个方法,该方法会在 Spring 容器启动时执行,在这个方法里将非静态变量的值赋给静态变量,从而完成 `@Value` 注入静态属性的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值