Spring管理工具类的方法

在开发中,我们经常会定义一些工具类,这些类中一般都是静态方法。使用时,直接使用类名.方法名调用即可,无需把工具类实例化。例如如下的工具类:

public class Test {

    public static int add(int a, int b) {

        return a + b;
    }
}

使用时, 直接调用

int result = Test.add(1, 1);

但有的时候,我们的工具类可能会需要使用Spring的bean容器中定义的一些单例bean的方法来辅助计算,比如:

 public class Test {     
    
    @Autowired
    private XXService xxService; // 注意,这是spring中的一个单例bean  

    public static int add(int a, int b) { 
        // 这里会收到报错:Cannot make a static reference to the non-static field aservice             
        int c = xxService.doSomething(a); 
        return c + b; 
    } 
}

这时该怎么办呢,我这里提供一个我认为比较好的方式来实现(其实有多重方法来做)。

第一步,使用注解@Component将Test交给Spring容器来管理,这样才能让Test在初始化时注入XXService的实例

第二步,在Test类中创建一个自己类型的静态变量,用于后续的调用

第三步,使用注解@PostConstruct(这是在构造函数执行后执行的初始化动作)的方法,来将Test对象自己的实例赋给自己类型的静态变量。

第四步,把原来Test的静态add方法,变为成员方法

完整代码如下:

@Component // 第一步
public class Test {

    public static Test INSTANCE; // 第二步

    @PostConstruct // 第三步
    public void init() {
        INSTANCE = this;
    }
	
    @Autowired
    private AService aservice;
	
    public int add(int a, int b) { // 第四步,去掉static
	aservice.service();
	return a + b;
    }
}

后面的调用就简单了,改为:

Test.INSTANCE.add(1, 1);

OK!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值