Spring中 静态成员变量的注入,以及其他静态成员变量的单例延迟加载--查漏补缺

本文介绍如何在Spring框架中为静态成员变量进行属性值注入。针对静态变量无法直接使用@Value注解的问题,提出了解决方案,即通过定义非静态setter方法并结合@Value注解来实现。此外还探讨了在单例模式下如何正确地实现延迟加载。

Spring对于一个需要自动注入的类,首先应该在类上加入注解:@compone   或者@seveice等等。


由于对于静态成员变量,直接加@Value("xxxxx")是无法获取值的,运行时是在其他方法中调用为null,我们知道spring自动注入是通过调用该类的setter方法注入,因此可以通过添加该成员变量的setter方法,(注意:若用eclipse自动导入setter功能,出现的setter方法是静态static的,你需要去除static关键字),然后在出现的setter方法上加入@Value("xxxxx"),此时就能获得自动注入资源文件设置的值了。

对于单例模式,我们通常定义单例为private static Singlon instance;

通常可以采用以下的双重检查的方式:

private static   Singlon getInstace() {  
        if(instance== null){  
            synchronized (
 Singlon.class) {  
                if(instance == null){  
               
                 instance= new  Singlon();  
                }  
            }  
        }  
        return instance;  
    }  


通过这种延迟加载的方式,我们可以在单例中引入注入的静态成员变量的值。

若通过"饿汉模式",则无法引用我们自动注入的静态变量,原因我们也知道,JAVA 类加载机制,加载循序的问题。

项目中遇到的问题,我刚好采用这种方式实现,所以在此处写一篇博文。一点浅见。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值