开发者

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

目GlslpSS录
  • 1.说明
  • 2.示例
    • ①be编程an的注入方式
    • ②Nacos中配置的注入方式
  • 3.补充
    • 总结

      1.说明

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

      工具类中的属性及方法都被static修饰,在www.devze.com工具类中不能使用和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 AccessK编程客栈ey;
          // 权限密码
          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,然后进行使用。

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

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜