I have encountered a strange problem. I am under the impression that component scan scans the sub packages recursively if a top level package is specified for scanning.
My repositories and entities are the maven dependency of the project. They live under the package name com.foo.bar.xyz and my application config is under package com.foo.bar. When I write @ComponentScan(basePackages = "com.foo.bar")
, along with @EnableJpaRepositories
it gives an error that repository bean not found.
However when I specify a top level repository package like @EnableJpaRepositories(basePackages = com.foo.bar.xyz)
, along with component scan as above, it detects the repository just fine.
Now is this happening only because the repositories and entities are being injected as maven dependency? So does the recursive part of component scan, scans the sub packages or the subdirectories?
To add many packages to Component Scan, you should pass the String[] array to the @ComponentScan annotation.
Auto Components ScanningPut this “ context:component ” in bean configuration file, it means, enable auto scanning feature in Spring. The base-package is indicate where are your components stored, Spring will scan this folder and find out the bean (annotated with @Component) and register it in Spring container.
While developing an application, we need to tell the Spring framework to look for Spring-managed components. @ComponentScan enables Spring to scan for things like configurations, controllers, services, and other components we define.
Using @ComponentScan in a Spring Application. With Spring, we use the @ComponentScan annotation along with the @Configuration annotation to specify the packages that we want to be scanned. @ComponentScan without arguments tells Spring to scan the current package and all of its sub-packages.
Now is this happening only because the repositories and entities are being injected as maven dependency?
So does the recursive part of component scan, scans the sub packages or the subdirectories?
To elaborate here @ComponentScan
is intended to search all classes having @Component
or its sub types like @Controller
whereas to enable Spring Data JPA by annotating the PersistenceContext class with the @EnableJpaRepositories
annotation and to configure the base packages that are scanned when Spring Data JPA creates implementations for the repository interfaces. Hence the need for declaring the base package information for both @ComponentScan
and @EnableJpaRepositories
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With