广告
返回顶部
首页 > 资讯 > 后端开发 > Python >springboot 静态方法中使用@Autowired注入方式
  • 455
分享到

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

2024-04-02 19:04:59 455人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录静态方法使用@Autowired注入静态方法使用@Autowired注入的类解决方法静态方法使用@Autowired注入 @Component public class Stru

静态方法使用@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;
 
    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;
    }
    
    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;
    }
}

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

--结束END--

本文标题: springboot 静态方法中使用@Autowired注入方式

本文链接: https://www.lsjlt.com/news/139069.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作