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

网友投稿 863 2022-10-31

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

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

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

静态方法使用@Autowired注入

@Component

public class StructUtil {

private static StructService structService;

private static List structInfos;

// 通过重写set注入

@Autowired

public void setStructService(StructService structService){

StructUtil.structService = structService;

}

public static List FMSTwXgetStruct(){

if(null==structInfos){

structInfos = structService.getStruct();

}

return structInfos;

}

}

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

原来是这样的

@Component

public class WeChatContant {

@Autowired

private RestTemplate restTemplate;

/**http://

* 编写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;

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:到底应不应该使用 lombok
下一篇:viu 一个用Rust编写命令行应用程序,用于在终端中查看图像
相关文章

 发表评论

暂时没有评论,来抢沙发吧~