最近有个需求是要对上传的xml进行规则校验,写完了方法后发现,这部分代码太多了,不适合挤在一个类中,就想着提出来当工具类,后来发现提取出来后,注入的Server为null
后来加了@Component也没用,后面找到一篇博客工具类Util中如何注解注入Service不报空就解决了,在此记录下.
/*
* 第一步:工具类一定要用@component进行注解
*/
@Component
public class XMLValidatorUtils{
@Autowired
private ShareCodesService ShareCodesService ;
/*
* 第二步:建一个静态的本类
*/
private static XMLValidatorUtils xmlValidatorUtils;
/*
* 第三步:将本类初始化
* @PostConstruct 注解的作用是标注当前方法在项目启动的时候就执行,也可以理解为在Spring容器启动的时候执行,并且只执行一次,可作为一些数据的常规化加载,比如数据字典之类
*/
@PostConstruct
private void init() {
xmlValidatorUtils = this;
xmlValidatorUtils.gtbshareCodesService = this.gtbshareCodesService;
}
public static List<SysButtons> methodName( String attr) {
// 执行需要使用的server方法
xmlValidatorUtils.gtbshareCodesService.findByType(type, node.getText());、
// xxx
return null;
}
}
@PostConstruct 点进去可以看到是来自package javax.annotation; 是Java自己的注解
源码中的注释
这个注解@PostConstruct的作用大概就是被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
找了张网图⬇