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){

  }

}
0
Shivam Patil 14 marzec 2020, 10:49

2 odpowiedzi

Najlepsza odpowiedź

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);
1
Kerim 14 marzec 2020, 08:01

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:

  1. Nie będzie można używać adnotacji na tych zajęciach
  2. 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ą.

1
BioShock 14 marzec 2020, 11:02