Gointerface接口声明实现及作用详解
618
2022-08-28
springboot 静态方法中使用@Autowired注入方式
目录静态方法使用@Autowired注入静态方法使用@Autowired注入的类解决方法
静态方法使用@Autowired注入
@Component
public class StructUtil {
private static StructService structService;
private static List
// 通过重写set注入
@Autowired
public void setStructService(StructService structService){
StructUtil.structService = structService;
}
public static List
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~