gpt4 book ai didi

java - 通过 javax.inject.Provider 进行 Spring 注入(inject)太慢

转载 作者:行者123 更新时间:2023-11-30 04:45:57 25 4
gpt4 key购买 nike

我们在大型 Web 应用程序中使用 Spring 依赖注入(inject)。有些服务必须处理请求或 session 数据,我们使用 javax.inject.Provider 接口(interface)实现它,如下所示(我们使用构造函数注入(inject),但在本例中我将提供程序直接注入(inject)到字段中,因此该示例较短):

@Service
public class SomeService()
{
@Autowired
public Provider<Data> dataProvider;

public void doSomething()
{
Data data = this.dataProvider().get()

...Do something with the request...
}
}

在此示例中,Data 是一些 session 范围的数据。该服务本身是一个单例。

现在的问题是 dataProvider.get() 调用WAY太慢。它需要几秒钟才能完成。我调试了该调用,发现时间被消耗在方法 DefaultListableBeanFactory.getBeanNamesForType 中的某个位置。在此方法中,将获取所有 bean 定义名称的列表(其中包含 1000 多个名称(我们有很多 Controller 、DAO 和服务...)并迭代以查找要注入(inject)的 bean。

如果速度那么慢,这几乎毫无用处。我很震惊,我们已经有这么多 Spring bean,但是有没有办法提高 javax.inject.provider 的查找速度,或者有一个很好的不同方法来解决这种注入(inject)?也许有某种方法可以定义 Spring 可以注入(inject)的我们自己的提供程序实现,这样它就不会在每次调用 Provider.get() 方法时都搜索匹配的 bean?

最佳答案

DefaultListableBeanFactory.getBeanNamesForType 的性能被作为一个问题提出,并已在 Spring 3.2 中修复。

问题是here

您可以尝试一下3.2 M1,看看是否能改善这种情况。

关于java - 通过 javax.inject.Provider 进行 Spring 注入(inject)太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10949942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com