一般需要在一个工具类中使用@Autowired 注解注入一个service。但是由于工具类方法一般都写成static,所以直接注入就存在问题。

使用如下方式可以解决:

  1. /**
  2. *
  3. */
  4. package cn.ffcs.drive.common.util;
  5. import javax.annotation.PostConstruct;
  6. import javax.servlet.http.HttpServletRequest;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Component;
  11. import cn.ffcs.drive.domain.Admin;
  12. import cn.ffcs.drive.domain.OpeLog;
  13. import cn.ffcs.drive.service.IOpeLogService;
  14. import cn.ffcs.zq.util.DateUtils;
  15. /**
  16. * className:OpeLogUtils
  17. *
  18. * 管理员操作日志
  19. *
  20. * @author pengyh
  21. * @version 1.0.0
  22. * @date 2014-07-10 09:04:48
  23. *
  24. */
  25. @Component
  26. public class OpeLogUtils {
  27. private static Logger logger = LoggerFactory.getLogger(OpeLogUtils.class);
  28. @Autowired
  29. private IOpeLogService opeLogService;
  30. private static OpeLogUtils opeLogUtils;
  31. public void setUserInfo(IOpeLogService opeLogService) {
  32. this.opeLogService = opeLogService;
  33. }
  34. @PostConstruct
  35. public void init() {
  36. opeLogUtils = this;
  37. opeLogUtils.opeLogService = this.opeLogService;
  38. }
  39. /**
  40. * 执行操作日志入库操作
  41. * @param adminId   管理员id
  42. * @param opeDesc   操作日志信息
  43. * @param cityCode  城市编码
  44. */
  45. public static void insertOpeLog(HttpServletRequest req, String opeDesc) {
  46. try {
  47. /**
  48. * 获取管理员信息
  49. */
  50. Admin admin = DriveUtil.getSessionUser(req);
  51. if(admin != null && opeDesc != null && !opeDesc.trim().equals("")){
  52. //封装日志信息
  53. logger.info("开始封装日志信息。");
  54. OpeLog opeLog = new OpeLog();
  55. opeLog.setAdminId(admin.getId());
  56. opeLog.setCityCode(admin.getCityCode());
  57. opeLog.setOpeDesc("管理员id="+admin.getId()+"操作【"+opeDesc+"】");
  58. opeLog.setOpeTime(DateUtils.getNow());
  59. opeLog.setIsDelete("0");
  60. opeLogUtils.opeLogService.save(opeLog);
  61. logger.info("保存管理员操作日志成功,信息为【adminId:{},cityCode:{},opeDesc:{},opeTime:{}】",new Object[]{admin!=null?admin.getId():null,admin.getCityCode(),opeDesc,DateUtils.getNow()});
  62. }else{
  63. logger.info("保存操作日志失败,参数不足【adminId:{},cityCode:{},opeDesc:{},opeTime:{}】",new Object[]{admin!=null?admin.getId():null, admin!=null?admin.getCityCode():null, opeDesc, DateUtils.getNow()});
  64. }
  65. } catch (Exception e) {
  66. logger.error("保存操作日志异常,异常信息为:" + e.getMessage(), e);

静态工具类中使用注解注入service实例的更多相关文章

  1. 静态工具类中使用注解注入service

    转载:http://blog.csdn.net/p793049488/article/details/37819121 一般需要在一个工具类中使用@Autowired 注解注入一个service.但是 ...

  2. spring 在静态工具类中使用注解注入bean

    /** * @author: jerry * @Email: * @Company: * @Action: 日志处理工具类 * @DATE: 2016-9-19 */ @Component//泛指组件 ...

  3. SpringBoot 项目在静态工具类中注入 RedisTemplate

    静态属性不能直接注入,可以通过其set方法进行注入.(注意生成的set方法需要去掉static). 在工具类里直接注入RedisTemplate,两种方法: (1)使用@Autowired priva ...

  4. 解决 SpringMVC 非spring管理的工具类使用@Autowired注解注入DAO为null的问题

    在SpringMVC框架中,我们经常要使用@Autowired注解注入Service或者Mapper接口,我们也知道,在Controller层中注入service接口,在service层中注入其它的s ...

  5. JAVA中SpringMVC获取bean方法,在工具类(utils)注入service

    有时候我们会出现无法用注解 @Autowired 注入bean的情况,这个时候可以 通过contextLoader获取 WebApplicationContext ctx = ContextLoade ...

  6. 在静态工具类中需要注入mapper

    在xml中 <bean id="messageUtil" class="org.ldd.ssm.hangyu.utils.MessageUtil" ini ...

  7. Spring 中将service 注入到普通的工具类中

    记录一下,防止忘记. 要求每次生成一个和数据库不重复的组队码,于是就想在工具类中加入service注入 方法1(红框是注意的地方)

  8. Springboot在工具类(Util)中使用@Autowired注入Service

    1. 使用@Component注解标记工具类MailUtil: 2. 使用@Autowired注入我们需要的bean: 3. 在工具类中编写init()函数,并使用@PostConstruct注解标记 ...

  9. 关于工具类静态方法调用@Autowired注入的service类问题

    @Component //此处注解不能省却(0) 1 public class NtClient { 2 /** 3 * 日志 4 */ 5 private static String clazzNa ...

随机推荐

  1. spring-bean(三)

    配置方式:通过工厂方法配置bean,通过FactoryBean配置bean 配置形式:基于注解的方式 组件扫描 泛型依赖注入 静态工厂方法 /** * 静态工厂方法:直接调用某一个类的静态方法就可以返 ...

  2. iframe 完全跨域自适应高度

    1.跨域访问页面, 需要访问后台的页面,通过后台调转 2.跨域自适应宽高   思路:通过相互嵌套,获取跨域页面的高度,通过src传回到本域,通过parent方法设置主页的iframe的高度 index ...

  3. 离开APM的弹性云还是真弹性吗

    准确来说应该叫脱离业务的弹性云或者容器都是伪弹性.之所以标题中有APM一是因为它近来热门,二是因为它在我将要说的这个事情上起到关键性的作用. 不管是亚马逊的弹性云.容器方案或者国内众多云厂商在自动伸缩 ...

  4. 使用libsvm实现文本分类

    @Hcy(黄灿奕) 文本分类,首先它是分类问题,应该对应着分类过程的两个重要的步骤,一个是使用训练数据集训练分类器,另一个就是使用测试数据集来评价分类器的分类精度.然而,作为文本分类,它还具有文本这样 ...

  5. 测试当前C环境的栈帧增长方向以及传递参数时的压栈顺序

    前文链接:上次由于一个很常见的printf-bug(下文有提及)引发了我对栈的思考,并写下了一点总结.这次就尝试对不同的C环境进行实践,检测其传递参数的一些性质. 这是今天写的检查C环境的一段程序.能 ...

  6. (转)使用Spring配置文件实现事务管理

    http://blog.csdn.net/yerenyuan_pku/article/details/52886207 前面我们讲解了使用Spring注解方式来管理事务,现在我们就来学习使用Sprin ...

  7. 如何理解Python中的if __name__ == '__main__'

    1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...

  8. jmeter 接口测试简介

    前言: 本文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对 ...

  9. uva1612 Guess

    和cf的打分有点像啊 因为一共只有三道题,所以每个人的得分最多有8种可能性.把这8种可能性都算出来,存在数组里,排好序备用排名就是一个天然的链表,给出了扫描的顺序扫描时,维护两个变量:前一个playe ...

  10. uva1442 Cav

    连通器向左向右扫描两次即可每一段有水的连通区域,高度必须相同,且不超过最低天花板高度if(p[i] > level) level = p[i]; 被隔断,要上升(隔断后,之前的就不变了,之后的从 ...