【发布时间】:2014-09-29 10:18:05
【问题描述】:
我们有一个包含数千个 bean 的大型 java 应用程序,分析缓慢的 spring 上下文初始化,我们发现按类型自动连接是占用大部分上下文加载时间的原因。 按名称自动装配 bean 似乎将上下文初始化提高了一个数量级。 但是我找不到按名称自动连接 bean 作为构造函数参数的方法。
以下是一个可以正常工作的成员自动装配,spring 按名称进行查找:
class MyClass {
@Resource
private MyBean mybean;
}
但由于@Resource 仅适用于成员和方法,它不适用于构造函数。 我们尝试了使用@Named 的@Inject 和使用@Qualifier 的@Autowired,但是Spring 对这些方法的类型查找速度很慢:
class MyClass {
@Inject
public MyClass(@Named("myBean") MyBean myBean) {
}
}
class MyClass {
@Autowired
public MyClass(@Qualifer("myBean") MyBean myBean) {
}
}
使用构造函数注入时如何告诉spring不要按类型查找?
我们了解按类型连接的优势(与 bean 名称分离),但在这一点上,上下文加载性能是我们最关心的问题。
【问题讨论】:
-
在代码中添加注释(元数据)的全部意义在于实现“类型安全注入”。您想放弃此注射器的基本功能。也许解决这个问题的正确方法是让您的应用程序更加模块化,这样您就不必构建一个巨大的 ApplicationContext。
-
为什么不能只在配置中配置这些bean?
标签: java spring constructor autowired