Sobes.tech
Junior — Middle
145

Πώς μπορεί να ρυθμιστεί το Spring ώστε κάθε φορά που γίνεται εισαγωγή ενός συστατικού μέσω @Autowired να δημιουργείται ένα νέο αντίγραφο της κλάσης που έχει σημειωθεί ως @Component;

Εταιρείες όπου ρωτήθηκαν
Hftlabs

Απάντηση από AI

sobes.tech AI

По умолчанию Spring создает синглтон-экземпляр компонента, помеченного @Component. Чтобы при каждом внедрении через @Autowired создавался новый экземпляр, нужно изменить область видимости бина на prototype.

Для этого:

  1. Добавьте аннотацию @Scope("prototype") к классу:
@Component
@Scope("prototype")
public class MyComponent {
    //...
}
  1. Теперь при каждом вызове Spring будет создавать новый экземпляр этого компонента.

Важно: если вы внедряете prototype-бин в singleton-бин, то prototype-экземпляр создастся один раз при создании singleton. Чтобы получать новый экземпляр каждый раз, можно использовать ObjectFactory или Provider:

@Autowired
private ObjectFactory<MyComponent> myComponentFactory;

public void someMethod() {
    MyComponent instance = myComponentFactory.getObject();
    // использовать instance
}

Таким образом, можно контролировать создание новых экземпляров при необходимости.