Mam wymaganie, w którym chcę wywołać sparametryzowany konstruktor klasy z adnotacją @Component wewnątrz innej klasy, która jest oznaczona adnotacją @Service
Nie krępuj się, jeśli nie dostałeś mojego pytania.
@Service
Class ServiceClass{
//here I want to create ComponentClass instance by Spring.
Result result=new ComponentClass(sending data to get result);
}
@Component
Class ComponentClass {
Component(received data){
}
}
2 odpowiedzi
Myślę, że powinieneś wypróbować słowo kluczowe „Autowired”. Mówi się: „Hej, Spring Framework, spróbuj zainicjować zmienną za mnie”.
@Autowired
Result result=new ComponentClass(sending data to get result);
Ilekroć zdefiniujesz @Servive
lub @Component
, zostanie utworzony ziarno tego typu (pamiętaj, że wszystkie ziarna są singletonami). Fasolę można wstrzyknąć do dowolnej innej fasoli z uprawą sprężynową, korzystając z tej adnotacji:
@Service
Class ServiceClass{
@Autowired
Result result;
}
Używanie fasoli (komponentów, usług itp.) Nie zawsze jest potrzebne, a zwłaszcza w przypadku, gdy potrzebujesz klasy innej niż singleton, sprawy mogą się komplikować z dwóch powodów:
- Nie będzie można używać adnotacji na tych zajęciach
- Klasa bez adnotacji (fasola zarządzana sprężyną) nie obsługuje wstrzykiwania.
Aby wstawić fasolę do klasy, która nie jest opisana, musisz zdefiniować kontekst sprężyny:
@Component
public class SpringContext implements ApplicationContextAware {
private static ApplicationContext context
public static <T extends Object> T getBean(Class<T> beanClass) {
return context.getBean(beanClass);
}
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
SpringContext.context = context;
}
}
A następnie do dowolnej klasy:
Class ServiceClass{
Result result = SpringContext.getBean(Result.class);
}
Gdzie wynik jest komponentem lub usługą.
Podobne pytania
Powiązane pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].