当前位置: 代码网 > it编程>编程语言>Java > 静态工具类中注入Bean及引用Nacos配置方式

静态工具类中注入Bean及引用Nacos配置方式

2025年08月23日 Java 我要评论
1.说明在代码开发中,经常会存在调用第三方工具或者其他系统的场景,通常封装成一个工具类供service进行调用,便于后期的维护及代码复用。工具类中的属性及方法都被static修饰,在工具类中不能使用和

1.说明

在代码开发中,经常会存在调用第三方工具或者其他系统的场景,通常封装成一个工具类供service进行调用,便于后期的维护及代码复用。

工具类中的属性及方法都被static修饰,在工具类中不能使用和service中一样的注入bean及引用nacos值的方式。

不能给静态变量注入bean的原因

spring从源码层面不提供对static修饰的变量进行注入,静态变量不属于任何一个实例,而是属于类的。

当类加载器加载静态变量时,spring的上下文环境还没有被加载。

这是因为初始化类的加载升序导致的,程序启动时会加载根路径下所有的类,不管这个类是否会用到都会去加载;会先初始化静态变量和执行静态代码块,这时候无法创建对象,而@autowired是要注入一个对象

2.示例

@component
public class bpmutils {


    private static resttemplate resttemplate;
    private static logtool logtool;

    @autowired
    public void setresttemplate(resttemplate resttemplate) {
        bpmutils.resttemplate = resttemplate;
    }

    @autowired
    public void setlogtool(logtool logtool) {
        bpmutils.logtool = logtool;
    }

    // 权限用户名
    private static string accesskey;
    // 权限密码
    private static string secret;
    // 系统用户
    private static string usercode;
    // tokenurl
    private static string tokenurl;
    // 部门url
    private static string depturl;
    // 用户url
    private static string userurl;

    @nacosvalue(value = "${bpm.accesskey}", autorefreshed = true)
    public void setaccesskey(string accesskey) {
        bpmutils.accesskey = accesskey;
    }

    @nacosvalue(value = "${bpm.secret}", autorefreshed = true)
    public void setsecret(string secret) {
        bpmutils.secret = secret;
    }

    @nacosvalue(value = "${bpm.usercode}", autorefreshed = true)
    public void setusercode(string usercode) {
        bpmutils.usercode = usercode;
    }

    @nacosvalue(value = "${bpm.tokenurl}", autorefreshed = true)
    public void settokenurl(string tokenurl) {
        bpmutils.tokenurl = tokenurl;
    }

    @nacosvalue(value = "${bpm.depturl}", autorefreshed = true)
    public void setdepturl(string depturl) {
        bpmutils.depturl = depturl;
    }

    @nacosvalue(value = "${bpm.userurl}", autorefreshed = true)
    public void setuserurl(string userurl) {
        bpmutils.userurl = userurl;
    }
}

①bean的注入方式

可以通过构造器进行注入,或者通过setter方法进行注入。注意要在类上添加@component注解,标记为一个bean,这样spring容器会扫描到。

我上面采用的是setter方法注入,将容器中已有的bean设置到静态变量中。

也可以使用构造器注入的方式

    @autowired
    public testclass(autowiredtypecomponent component) {
        testclass.component = component;
    }

②nacos中配置的注入方式

通过setter方法进行注入,在setter方法上添加nacos注解,获取配置的值,将值设置到静态变量中。

3.补充

在实际开发中,我们也可以不使用静态工具类的方式,可以通过注解方式创建一个bean,在bean内直接注入nacos中的属性,并写一些方法,实际使用时,可以直接注入bean,然后进行使用。

使用静态工具类的方式,无需注入,可以直接使用。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com