如果在工具类里面需要使用到service层的代码,需要使用@autowired或者@resource进行注入,但由于是在静态方法中调用service,因此只能定义静态成员变量的service,但由于如果是静态的成员变量service,则无法实现直接注入对象.因此可以考虑另一种操作.
/**
*签名校验封装
* @author zyzyz
* @date 2022年05月22日 17:12:55
* @package_name com.zyz.yygh.hosp.utils
*/
//第一步:工具类需要实现初始化接口,并交给spring管理
@Component
public class SignKeyUtil implements InitializingBean {
//第二步:映入所需的service
public static HospitalSetService hospitalSetService;
//第三步:创建公共成员变量,并实现自动注入
@Autowired
private HospitalSetService hospitalSetService1;
//第四步:由于实现了初始化,因此需要重写一个初始化方法,并在方法里将注入的成员变量的值复制给私有成员 变量service
@Override
public void afterPropertiesSet() throws Exception {
hospitalSetService = this.hospitalSetService1;
}
//第五步:接着就可以实现在工具类中的调用了
public static void SignKeyMD5(Map<String,Object> map,String hoscode){
// 签名校验
// 获取医院系统传过来的签名key 已经进行md5加密
String hospSignKey = String.valueOf(map.get("sign"));
System.out.println(hospSignKey);
System.out.println(hoscode);
// 从数据库中获取签名key
String signKey = hospitalSetService.getSignKey(hoscode);
System.out.println(signKey);
// 进行MD5加密
String signMD5 = MD5.encrypt(signKey);
System.out.println("signMD5 = " + signMD5);
//判断 如果不相等 抛出异常
if(!hospSignKey.equals(signMD5)){
throw new YyghException(ResultStatus.SIGN_ERROR);
}
}
}