《Java实战开发》使用spring向静态方法中注入的成员变量和对象类

工具类的静态方法中要使用别的对象类和使用@value注入成员变量,由于静态方法是属于类的,普通方法才属于对象,spring注入是在容器中实例化变量的,静态是先于对象加载的,所以直接在静态方法中调用注入的静态变量会报空指针异常。所以需要做一些处理

用到的注解@Component、@Autowired、@PostConstruct、@Value

 

例如:

@Component 
public class TestUtil { 
    

    private static TestUtil testUtil ; 

    //使用@Autowired和@PostConstruct注入对象
    @Autowired 
    private TargetClass targetClass; 

    @PostConstruct 
    public void init() { 
        testUtil = this; 
        testUtil .targetClass= this.targetClass; 
    } 


    //使用@Value注入变量
    //不能直接在静态变量上使用@Value注入,Spring的@Value依赖注入是依赖set方法,set方法是普通的对象方法,static变量是类的属性,static没有set方法。
    //但是Spring支持set方法注入,可以利用非静态的setter方法注入静态常量。注意set方法不能有static
    
    private static String targetString;

    @Value("${target_value}")
    private void setTargetString(String targetString){
        TestUtil.targetString=targetString;
    }


    //静态方法
    public static void testMathod() { 
        String xxx = testUtil.targetClass.getTargetTest(); 
        System.print.out(xxx);
        System.print.out(targetString);
    } 

} 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值