繁体   English   中英

Spring TaskExecutor类中的自动装配对象为null

[英]autowired object is null in spring TaskExecutor class

我正在尝试使用Spring TaskExecutor使用不同的线程运行方法。 我有一个自动装配的依存关系,我得到了NullPointerException。自动装配的依赖为null。 请帮忙。

TaskExecutor类如下:

public class WebClientTaskExecutor {

    @Autowired
    WebClientService webClientService;

    public class SyncMails implements Runnable {

        private String userName;

        private Store store;

        public SyncMails(String userName, Store store) {
            this.userName = userName;
            this.store = store;

        }

        @Override
        public void run() {
            try {
                System.out.println("inside sync mails run method");

                String[] folderNames = { "inbox", "sent", "trash", "drafts" };
                for (String folderName : folderNames) {
//Null pointer exception in below line.webClientservice=null
                        int messageCount = WebClientTaskExecutor.this.webClientService.getMessageCount(
                                folderName, this.store);
                        int dbLatestMessageNumber = WebClientTaskExecutor.this.webClientService
                                .getLatestMessageNumberFromDb(folderName,
                                        this.userName, 1);
                        System.out.println("MEssage count---->" + messageCount);
                        System.out.println("Latest message count dao--->"
                                + dbLatestMessageNumber);
                        if (messageCount > dbLatestMessageNumber) {
                            WebClientTaskExecutor.this.webClientService.getMailsFromImap(folderName,
                                    messageCount, dbLatestMessageNumber + 1,
                                    this.store, this.userName);
                        }

                    }
                } catch (MessagingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

            public String getUserName() {
                return userName;
            }

            public void setUser(String userName) {
                this.userName = userName;
            }

            public Store getStore() {
                return store;
            }

            public void setStore(Store store) {
                this.store = store;
            }

        }


        private TaskExecutor taskExecutor;

          public WebClientTaskExecutor(TaskExecutor taskExecutor) {
            this.taskExecutor = taskExecutor;
          }

          public void syncMails(String userName,Store store){
              System.out.println("web client service object---->" + webClientService);
              this.taskExecutor.execute(new SyncMails(userName, store));
          }
    }

在控制器中,我正在创建thrTaskExecutor对象,并将其提供给WebClientTaskExecutor构造函数。然后启动syncMails方法。

ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(20);
        executor.setQueueCapacity(50);
        executor.initialize();
            WebClientTaskExecutor taskExecutor = new WebClientTaskExecutor(executor);
            taskExecutor.syncMails(userName, store);

@Autowired注释仅在Spring Bean类中有效。 因此,必须通过正确注释@Component, @Service, @Repository, @Controller )或通过在Spring XML上下文文件中定义此bean来将类声明为Spring bean。

您也不能自己创建Spring bean的实例,而应使用@Autowired批注。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM