Solución:
Coloque su controlador debajo del subpaquete de di.prac
igual que di.prac.controllers
o usar @ComponentScan
en su controlador. De forma predeterminada, Spring escanea los paquetes actuales y secundarios donde está presente su aplicación principal. Si también desea escanear otros paquetes, puede especificar los paquetes en @SpringBootApplication
como un argumento como.
@SpringBootApplication(scanBasePackages = {"com.xyz.controllers", "com.abc.models""})
Debemos evitar poner la clase @Configuration en el paquete predeterminado (es decir, no especificar el paquete en absoluto). En este caso, Spring escanea todas las clases en todos los archivos jar en un classpath. Eso provoca errores y la aplicación probablemente no se inicia.
Para que su controlador esté disponible en el contexto de Spring, debe definir que está administrado por el contenedor Spring. Solo la anotación @Controller no es suficiente, indica solo el estereotipo de su bean, así como las anotaciones @Repository y @Service.
En los casos en los que los beans tienen estas anotaciones y son administrados por Spring, es porque sus paquetes que Spring está escaneando para buscarlos se han especificado programáticamente o por xml. En su caso, debe anotar su clase DemoApplication con otras 2 anotaciones:
- @Configuration: permite el acceso al contexto de primavera
-
@ComponentScan – Paquetes que serán escaneados por Spring
@Configuration @ComponentScan (basePackages = {"controllers"}) public class DemoApplication { public static void main(String[] args) { ApplicationContext ctx=SpringApplication.run(DemoApplication.class, args); MyController m = (MyController)ctx.getBean("myController"); m.hello(); System.out.println(Arrays.asList(ctx.getBeanDefinitionNames())); } }