Добавьте два разных экземпляра одного типа с помощью @Autowired

1

У меня есть следующий класс:

@Component
public class SearchComponent {
}

И он вводится в два поля в другом классе:

@Autowired
private SearchComponent errorSearch;

@Autowired
private SearchComponent successSearch;

Поведение по умолчанию заключается в том, чтобы вводить один и тот же экземпляр в оба поля, и это происходит, но я хочу, чтобы errorSearch и successSeach были разными экземплярами.

Это можно сделать? Как это можно сделать?

  • 0
    возможно эта ветка может вам помочь: stackoverflow.com/questions/14388480/…
  • 1
    Этот вид зависит от того, как вы хотите управлять этими бобами. Я предполагаю, что они настроены по-разному, это правильно? Вместо использования компонентного сканирования вы должны явно определить их как @Bean s или <bean> s.
Теги:
spring
autowired

1 ответ

1
Лучший ответ

Просто добавьте аннотацию @Scope к вашему классу компонентов:

@Component
@Scope("prototype")
public class SearchComponent {
}

Это позволит избежать SearchComponent класса SearchComponent в качестве одноэлементного (значение по умолчанию для области Spring bean), вместо этого создается новый экземпляр класса для каждой переменной Autowired.

Взгляните: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes

  • 1
    Но имейте в виду, что если вы хотите автоматически связать errorSearch или successSearch с другим классом, вы не сможете в качестве области действия прототипа создавать новые экземпляры.
  • 1
    mkyong.com/spring/spring-bean-scopes-examples для примеров

Ещё вопросы

Сообщество Overcoder
Наверх
Меню