I have multiple @Service
class which implements a class BaseService
In a Controller
class,
I want to call a Service
class (which implements BaseService
) based on a parameter
I’m using a function in Utils
and calling it from the Controller
class
public final class Util { public static BaseService getService(String num){ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.refresh(); if(num == 1){ return context.getBean(TestService.class); } return context.getBean(AnotherService.class); } }
My TestService
class has an @Service
annotation
TestService
works if I call it using constructor in the Controller
class
@Autowired public TestController(TestService service){ this.service = service; } service.callMethod(); //This works!!
But if I call the instance using Util
class, it gives me No such bean as TestService available
Advertisement
Answer
Your AnnotationConfigApplicationContext
is initially empty. To quote the documentation: “Create a new AnnotationConfigApplicationContext that needs to be populated through register(java.lang.Class<?>...)
calls and then manually refreshed.”