У нас есть большие java-приложения с тысячами bean-компонентов, профилируя медленную инициализацию контекста Spring, мы обнаружили, что автоматическое связывание по типу занимает большую часть времени загрузки контекста. Автосвязывание bean-компонента по имени, по-видимому, на порядок улучшает инициализацию контекста. Однако я не смог найти способ автоматического связывания bean-компонентов по имени в качестве аргументов конструктора.
Ниже приведен автопровод участника, который отлично работает, Spring выполняет поиск по имени:
class MyClass {
@Resource
private MyBean mybean;
}
Но поскольку @Resource применяется только к членам и методам, он не применяется к конструктору. Мы пробовали как @Inject с @Named, так и @Autowired с @Qualifier, но Spring выполняет медленный поиск по типу для этих подходов:
class MyClass {
@Inject
public MyClass(@Named("myBean") MyBean myBean) {
}
}
class MyClass {
@Autowired
public MyClass(@Qualifer("myBean") MyBean myBean) {
}
}
Как сказать Spring не искать по типу при использовании инъекции конструктора?
Мы понимаем преимущества wire по типу (отделение от имен bean-компонентов), но на данный момент производительность загрузки контекста является нашей самой большой проблемой.