Ответ
Да, может, но это зависит от scope (области видимости) бина.
По умолчанию бин имеет scope singleton — создается один экземпляр на весь контейнер Spring.
Для создания нескольких экземпляров используются другие scopes:
-
prototype: Каждый запрос бина черезApplicationContext.getBean()или инъекцию создает новый объект.@Component @Scope("prototype") public class PrototypeBean { /* ... */ } -
request,session,application(в веб-приложениях): Новый экземпляр создается для каждого HTTP-запроса, сессии или ServletContext соответственно.
Практический пример получения нескольких экземпляров prototype-бина:
@Service
public class MyService {
// Использование ObjectFactory или Provider для ленивого получения новых экземпляров
@Autowired
private ObjectFactory<PrototypeBean> prototypeBeanFactory;
public void process() {
PrototypeBean bean1 = prototypeBeanFactory.getObject();
PrototypeBean bean2 = prototypeBeanFactory.getObject();
// bean1 != bean2
}
}
Важно: Управление жизненным циклом prototype-бинов (например, вызов методов уничтожения) полностью ложится на клиентский код.