Назад к вопросам
Junior — Middle
102
Каким образом можно настроить Spring так, чтобы каждый раз при внедрении компонента через @Autowired создавался новый экземпляр класса, помеченного как @Component?
Компании, где спрашивали
Hftlabs
Ответ от нейросети
sobes.tech AI
По умолчанию Spring создает синглтон-экземпляр компонента, помеченного @Component. Чтобы при каждом внедрении через @Autowired создавался новый экземпляр, нужно изменить область видимости бина на prototype.
Для этого:
- Добавьте аннотацию @Scope("prototype") к классу:
@Component
@Scope("prototype")
public class MyComponent {
//...
}
- Теперь при каждом вызове Spring будет создавать новый экземпляр этого компонента.
Важно: если вы внедряете prototype-бин в singleton-бин, то prototype-экземпляр создастся один раз при создании singleton. Чтобы получать новый экземпляр каждый раз, можно использовать ObjectFactory или Provider:
@Autowired
private ObjectFactory<MyComponent> myComponentFactory;
public void someMethod() {
MyComponent instance = myComponentFactory.getObject();
// использовать instance
}
Таким образом, можно контролировать создание новых экземпляров при необходимости.