springboot 静态方法中使用@Autowired注入方式

 更新时间:2022年02月14日 10:55:53   作者:尧上有农  
这篇文章主要介绍了springboot 静态方法中使用@Autowired注入方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

静态方法使用@Autowired注入

@Component
public class StructUtil {
    private static StructService structService;
    private static List<StructInfo> structInfos;
	
	// 通过重写set注入
    @Autowired
    public void setStructService(StructService structService){
        StructUtil.structService = structService;
    }
    public static List<StructInfo> getStruct(){
        if(null==structInfos){
            structInfos = structService.getStruct();
        }
        return structInfos;
    }
}

静态方法使用@Autowired注入的类

在写公众号开发的时候,有一个处理get请求,我想使用Spring提供的RestTemplate处理发送;

原来是这样的

@Component
public  class WeChatContant {
@Autowired
    private RestTemplate restTemplate;
 /**
     * 编写Get请求的方法。但没有参数传递的时候,可以使用Get请求
     *
     * @param url 需要请求的URL
     * @return 将请求URL后返回的数据,转为JSON格式,并return
     */
    public  JSONObject doGerStr(String url) throws IOException {
        ResponseEntity responseEntity = restTemplate.getForEntity
                (
                        url,
                        String.class
                );
        Object body = responseEntity.getBody();
        assert body != null;
        JSONObject jsonObject = JSONObject.fromObject(body);
        System.out.println(11);
        return jsonObject;
    }
}

但是到这里的话restTemplate这个值为空,最后导致空指针异常。发生的原因是

static模块会被引入,当class加载后。你的component组件的依赖还没有初始化。

(你的依赖都是null)

解决方法

可以使用@PostConstruct这个注解解决

1,@PostConstruct 注解的方法在加载类的构造函数之后执行,也就是在加载了构造函数之后,为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

2,执行优先级高于非静态的初始化块,它会在类初始化(类加载的初始化阶段)的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。

自己理解的意思就是在component组件都加载完之后再加载

修改过后的代码如下

@Component
public  class WeChatContant {
    @Autowired
    private RestTemplate restTemplate;
    private static RestTemplate restTemplateemp;
    @PostConstruct
    public void init(){
        restTemplateemp  = restTemplate;
    }
    /**
     * 编写Get请求的方法。但没有参数传递的时候,可以使用Get请求
     *
     * @param url 需要请求的URL
     * @return 将请求URL后返回的数据,转为JSON格式,并return
     */
    public static JSONObject doGerStr(String url) throws IOException {
        ResponseEntity responseEntity = restTemplateemp.getForEntity
                (
                        url,
                        String.class
                );
        Object body = responseEntity.getBody();
        assert body != null;
        JSONObject jsonObject = JSONObject.fromObject(body);
        System.out.println(11);
        return jsonObject;
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java多线程通信:交替打印ABAB实例

    Java多线程通信:交替打印ABAB实例

    这篇文章主要介绍了Java多线程通信:交替打印ABAB实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 深入理解Java对象的序列化与反序列化的应用

    深入理解Java对象的序列化与反序列化的应用

    本篇文章是对Java中对象的序列化与反序列化进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Mybatis自定义类型转换器的使用技巧

    Mybatis自定义类型转换器的使用技巧

    这篇文章主要介绍了Mybatis自定义类型转换器的使用技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Java8处理集合的优雅姿势之Stream

    Java8处理集合的优雅姿势之Stream

    这篇文章主要给大家介绍了关于Java8优雅处理集合之Stream的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • java批量修改文件后缀名方法总结

    java批量修改文件后缀名方法总结

    在本篇文章里小编给大家分享了关于java批量修改文件后缀名方法和相关知识点,有需要的朋友们学习下。
    2019-03-03
  • 解决spring cloud服务启动之后回到命令行会自动挂掉问题

    解决spring cloud服务启动之后回到命令行会自动挂掉问题

    这篇文章主要介绍了解决spring cloud服务启动之后回到命令行会自动挂掉问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Springboot整合Shiro实现登录与权限校验详细解读

    Springboot整合Shiro实现登录与权限校验详细解读

    本文给大家介绍Springboot整合Shiro的基本使用,Apache Shiro是Java的一个安全框架,Shiro本身无法知道所持有令牌的用户是否合法,我们将整合Shiro实现登录与权限的验证
    2022-04-04
  • Java实现Timer的定时调度函数schedule的四种用法

    Java实现Timer的定时调度函数schedule的四种用法

    本文主要介绍了Java实现Timer的定时调度函数schedule的四种用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Java自带的Http Server实现设置返回值的类型(content-type)

    Java自带的Http Server实现设置返回值的类型(content-type)

    这篇文章主要介绍了Java自带的Http Server实现设置返回值的类型(content-type),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java实现银行ATM系统

    Java实现银行ATM系统

    这篇文章主要为大家详细介绍了Java实现银行ATM系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论