猿问

弹簧靴。如何利用原型范围?

我正试图找到一种方法,在春靴中创造一个优雅的可朗纳豆。该应用程序的要点是拥有一项服务,该服务将接收一些数据,并启动受监视的外部进程。


在我之前的尝试中,我只是简单地形成了一个常规并将其传递给执行服务。现在我正在考虑如何使用Spring环境正确执行此操作,并使用.new MyRunnable()@Scope("prototype")


我确实找到了一些例子,这些例子使用了,以及为什么Spring的应用程序Context.getBean被认为是坏的?,但我仍然无法正确理解如何根据一个服务实际调用,这将遵循以下简单的想法:ApplicationContext.getBean(...)new MyRunnable()


class MyService {

  public void triggerNewExternalTask() {

       ....

       executionService.run(new MyRunnable());


UYOU
浏览 120回答 2
2回答

饮歌长啸

我相信你走错了路。弹簧依赖注入很棒,但这并不意味着你永远不会在正确编写的Spring Boot应用程序中找到调用。new在这种情况下,呼叫是正确的做法。池中的每个实例都应在启动时获得自己的 / 实例。newExecutorRunnableCallable这适用于任何方法作用域变量:最好在方法作用域中实例化它,并让垃圾回收器在退出方法时清理它。在这种情况下,Spring没有理由对豆类生命周期负责。当您尝试共享实例时,您会走得太远,特别是如果它们具有状态。Runnable

狐的传说

即使问题已经结束,也偶然发现了另一个解决方案,即 - @Lookup,它符合任务:实体:@Component@Scope("prototype")public class Proto {    private static int counter;    public Proto() {        System.out.println("count: "+counter++);    }}服务:@Servicepublic class ProtoService {    @Lookup    public Proto getProto() {        return null;    }}和测试:@Servicepublic class LookupWorks {    @Autowired    private ProtoService serv;    @PostConstruct    private void test() {        System.out.println(">>>>>>>>>>>>>>");        serv.getProto();        serv.getProto();        serv.getProto();        serv.getProto();        serv.getProto();        System.out.println(">>>>>>>>>>>>>>");    }}输出:>>>>>>>>>>>>>>count: 0count: 1count: 2count: 3count: 4>>>>>>>>>>>>>>
随时随地看视频慕课网APP

相关分类

Java
我要回答