为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2022-09-28 10:25:15
我正试图找到一种方法,在春靴中创造一个优雅的可朗纳豆。该应用程序的要点是拥有一项服务,该服务将接收一些数据,并启动受监视的外部进程。在我之前的尝试中,我只是简单地形成了一个常规并将其传递给执行服务。现在我正在考虑如何使用Spring环境正确执行此操作,并使用.new MyRunnable()@Scope("prototype")我确实找到了一些例子,这些例子使用了,以及为什么Spring的应用程序Context.getBean被认为是坏的?,但我仍然无法正确理解如何根据一个服务实际调用,这将遵循以下简单的想法:ApplicationContext.getBean(...)new MyRunnable()class MyService {  public void triggerNewExternalTask() {       ....       executionService.run(new MyRunnable());
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我相信你走错了路。

弹簧依赖注入很棒,但这并不意味着你永远不会在正确编写的Spring Boot应用程序中找到调用。new

在这种情况下,呼叫是正确的做法。池中的每个实例都应在启动时获得自己的 / 实例。newExecutorRunnableCallable

这适用于任何方法作用域变量:最好在方法作用域中实例化它,并让垃圾回收器在退出方法时清理它。在这种情况下,Spring没有理由对豆类生命周期负责。

当您尝试共享实例时,您会走得太远,特别是如果它们具有状态。Runnable


查看完整回答
反对 回复 2022-09-28
?
狐的传说

TA贡献1804条经验 获得超3个赞

即使问题已经结束,也偶然发现了另一个解决方案,即 - @Lookup,它符合任务:实体:


@Component

@Scope("prototype")

public class Proto {

    private static int counter;

    public Proto() {

        System.out.println("count: "+counter++);

    }

}

服务:


@Service

public class ProtoService {

    @Lookup

    public Proto getProto() {

        return null;

    }

}

和测试:


@Service

public 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: 0

count: 1

count: 2

count: 3

count: 4

>>>>>>>>>>>>>>


查看完整回答
反对 回复 2022-09-28
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号