zoukankan      html  css  js  c++  java
  • spring@Aspect类@Autowired注入的bean为null 【转发】

    今天工作的时候需要做一个定时任务,在定时任务的job类中,需要调用之前的写好逻辑的service的代码。假设我的job类是MyJob,调用的service名称是MyService。而MyService中需要用到注入另一个service,名称是FlowService。

    首先,这几个类都要纳入spring的管理,需要加上@Controller,@Service注解。我第一次就忘了在MyJob上面加注解了,所以不行。

    同时因为我们调用的MyService需要注入其他的service,所以在MyJob类中不能通过new MyService()来调用其方法。原因是当我们这样做的时候,我们得到的MyService的实例就不是spring管理的bean了,这样的话,注入FlowService的时候是不会成功的,一直会是null。因此我们需要在MyJob中也通过@Autowired注解来注入MyService。但是当我这样做了之后,调试代码的时候,发现注入到MyJob中的MyService是null,这样就连调用MyService的代码都出错了。后来通过查资料,看博客才知道找到了下面的解决办法:

    在MyJob中,添加一个构造方法,添加一个静态变量,添加一个被@PostConstruct修饰的方法;具体代码如下:

    @Controller
    public class MyJob implements Job {
        private static final Logger LOG = LoggerFactory
                .getLogger(MyJob.class);
     
        private static final Lock executelock = new ReentrantLock(true);
        
        @Autowired
        private MyService myService;
        
        public static MyJob myJob ;
        public MyJob (){
            
        }
        
        @PostConstruct
        public void init(){
            myJob =this;
        }
        
        @Override
        public void execute(JobExecutionContext context)
                throws JobExecutionException {
            // TODO Auto-generated method stub
            if (executelock.tryLock()) {
                LOG.info("获取【互斥锁】,开始自动保存发送给工作人员的信息");
                try{
                    myJob.myService.saveMsgSendBoxShouLiToMember();
                }catch(Exception e){
                    System.out.println("执行失败");
                    LOG.error("自动保存发送给工作人员的信息任务发生异常:" + e);
                } finally {
                    executelock.unlock();
                    LOG.info("自动保存发送给工作人员的信息任务结束,释放【互斥锁】执行结束!");
                }
            } else {
                LOG.info("没有获取【互斥锁】, 自动保存发送给工作人员的信息任务放弃本次执行!");
            }
            
        }
    }
    View Code

    注意调用myservie的方法时,通过的myJob.myService.saveMsgSendBoxShouLiToMember();去调用

    ————————————————
    版权声明:本文为CSDN博主「zengdongwen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zengdongwen/java/article/details/86528735

  • 相关阅读:
    编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
    Java基础——数据类型之间的转换
    Spring 事物机制总结
    Spring 3.0 注解注入详解
    Spring 注解 @Resource和@Autowired
    从jsp向servlet传送数据的两种方式
    文本输入框,只能显示内容而不能修改
    myeclipse 中项目名出现红色感叹号解决方法
    在servlet中使用split()截取以反斜杠‘’分割的字符串
    jsp页面跳转方式
  • 原文地址:https://www.cnblogs.com/lonsn/p/12639488.html
Copyright © 2011-2022 走看看