Spring autowire по аргументу конструктора имен

У нас есть большие java-приложения с тысячами beans, профилирующие медленную инициализацию контекста spring, мы обнаружили, что автоматическая проводка по типу - это то, что занимает большую часть времени загрузки контекста. Autowiring bean по имени, кажется, улучшает инициализацию контекста на порядок. Однако я не смог найти способ автопровода beans по имени в качестве аргументов конструктора.

Ниже приведен авторизованный член, который отлично работает, 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 не искать по типу при использовании инъекции конструктора?

Мы понимаем преимущества проводки по типу (отделяем от имен bean), но на данный момент производительность загрузки в режиме загрузки является нашей самой большой проблемой.

+4
06 авг. '14 в 12:58
источник поделиться
1 ответ

Я знаю, что теперь он немного старомодный, но проводка по имени очень проста в xml, а Spring поддерживает микширование конфигурации xml и java.

Предоставлено bean myBean определено в xml конфигурации java, вы можете написать

<bean id="myClass" class="...MyClass">
    <constructor-arg ref = "myBean"/>
</bean>

или в случае нескольких аргументов:

<bean id="myClass" class="...MyClass">
    <constructor-arg index="0" ref = "myBean"/>
    <constructor-arg index="1" ref = "myOtherBean"/>
</bean>

ИЗМЕНИТЬ

В качестве альтернативы в java-конфигурации вы можете:

@Configuration
public class MyClassConfig() {

@Autowire
@Qualifier("myBean")
MyBean myBean;

@Bean
MyClass myclass = new MyClass(myBean);
}

Благодаря jny за его предложение.

0
06 авг. '14 в 13:25
источник

Посмотрите другие вопросы по меткам или Задайте вопрос