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编写计算器的常见方法实例总结

    Java编写计算器的常见方法实例总结

    这篇文章主要介绍了Java编写计算器的常见方法,结合实例形式总结分析了Java实现计算器功能的常用方法,需要的朋友可以参考下
    2016-04-04
  • Java Spring集成MapStruct详情

    Java Spring集成MapStruct详情

    这篇文章主要介绍了Java Spring集成MapStruct详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Java中Easypoi实现excel多sheet表导入导出功能

    Java中Easypoi实现excel多sheet表导入导出功能

    这篇文章主要介绍了Java中Easypoi实现excel多sheet表导入导出功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • MyBatisPlus自定义SQL的实现

    MyBatisPlus自定义SQL的实现

    MyBatisPlus提供了自定义SQL功能,允许开发者在Mapper接口中定义方法,并通过XML文件或注解编写SQL语句,本文详解了如何在MP中使用自定义SQL,感兴趣的可以了解一下
    2024-09-09
  • SpringSecurity配置HTTPS的实现

    SpringSecurity配置HTTPS的实现

    本文介绍了SpringBoot项目中配置HTTPS并集成SpringSecurity,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • java生成图片验证码实例代码

    java生成图片验证码实例代码

    这篇文章主要介绍了java生成图片验证码实例代码,验证码的种类有很多,问题验证、短信验证还有常见的图片验证,本文就为大家介绍生成图片验证码最简单方法,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Springboot内嵌tomcat应用原理深入分析

    Springboot内嵌tomcat应用原理深入分析

    懂得SpringBoot的童鞋应该很清楚,不管应用程序是属于何种类型,都是一个Main方法走遍天下,对于web应用,只需要引入spring-boot-starter-web中这个依赖,应用程序就好像直接给我们来了个tomcat一样,对于嵌入式Tomcat,其实也非常简单,就是调用Tomcat提供的外部类
    2022-09-09
  • java实现服务器巡查的代码

    java实现服务器巡查的代码

    接到上级领导任务,需要实现一个这样的需求,一大批服务器,需要检查服务器能否ping通,ssh密码是否正常,以及检查服务器的cpu,内存,硬盘占用情况,下面通过java代码实现服务器巡查功能,需要的朋友一起看看吧
    2021-12-12
  • springboot项目中实现访问druid内置监控页面

    springboot项目中实现访问druid内置监控页面

    这篇文章主要介绍了springboot项目中实现访问druid内置监控页面的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java Web开发防止多用户重复登录的完美解决方案

    Java Web开发防止多用户重复登录的完美解决方案

    在web项目开发中,很多情况下都可以让同一个账号信息在不同的登录入口登录很多次,这样子做的不是很完善。一般解决这种情况有两种解决方案,小编呢主要以第二种方式给大家介绍具体的实现方法,对java web 防止多用户重复登录的解决方案感兴趣的朋友一起看看吧
    2016-11-11

最新评论