加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 自动装配任务发送到Spring TaskExecutor

发布时间:2020-12-14 17:44:39 所属栏目:Java 来源:网络整理
导读:你怎么能有一个类实现Runnable并提交到 Spring TaskExecutor自动连线? 例如,我有一个任务: public class MyTask implements Runnable { @Autowired private MyRepository myRepository; @Override public void run() { myRepository.doSomething(); }} 还
你怎么能有一个类实现Runnable并提交到 Spring TaskExecutor自动连线?

例如,我有一个任务:

public class MyTask implements Runnable {

    @Autowired private MyRepository myRepository;

    @Override
    public void run() {
        myRepository.doSomething();
    }
}

还有一个将任务发送到Spring TaskExecutor的服务:

@Service
public class MyService {

    @Autowired private TaskExecutor taskExecutor;

    public void someMethod() {

        MyTask myTask = new MyTask();
        taskExecutor.execute(myTask);

    }

}

我知道这些字段不是自动连线的,因为MyTask使用新的MyTask()得到实例化.但是,如何解决这个问题?我应该访问Spring的ApplicationContext并通过它创建bean吗?在Web应用程序环境中如何做到这一点?

谢谢!

解决方法

使用Spring至少有两个很好的方法.一,@Configurable注释.使用这意味着对AspectJ的依赖,但它将允许您注入不受Spring管理的bean(即,您正在使用新的运算符).这将涉及使用@Configurable注释MyTask,并在链接中提到的向Spring配置添加几行.
@Configurable
public class MyTask implements Runnable { ... }

@Service
public class MyService {
   @Autowired private TaskExecutor taskExecutor;

   public void someMethod() {

     // AspectJ would jump in here and inject MyTask transparently
     MyTask myTask = new MyTask();
     taskExecutor.execute(myTask);

}

}

第二种方法将涉及使用Spring的ServiceLocatorFactoryBean功能来创建原型bean.这在JavaDoc中是最好的解释,但在这种情况下,您将注入一个TaskFactory到您的@Service注释类,就像任何其他bean一样,然后执行如下操作:

@Service
public class MyService {
  @Autowired private TaskExecutor taskExecutor;
  @Autowired private MyRepository myRepository;
  @Autowired private TaskFactory taskFactory;


public void someMethod() {
    MyTask myTask = taskFactory.getTask("myTask")
    taskExecutor.execute(myTask);
}

}

MyTask已经注入了您的存储库,您可以在XML映射中进行配置.我每天都使用这两种方法,但我倾向于倾向于第二种方法,因为它更容易阅读,并通过确保开发人员不做不容易测试的事情来保持开发人员的诚实,坦率地说,它的更多清楚给随便的观察者.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读