intellij incorrectly saying no beans of type found for autowired repository
JavaSpringIntellij IdeaAnnotationsAutowiredJava Problem Overview
I have created a simple unit test but IntelliJ is incorrectly highlighting it red. marking it as an error
No beans?
As you can see below it passes the test? So it must be Autowired?
Java Solutions
Solution 1 - Java
I had this same issue when creating a Spring Boot application using their @SpringBootApplication
annotation. This annotation represents @Configuration
, @EnableAutoConfiguration
and @ComponentScan
according to the spring reference.
As expected, the new annotation worked properly and my application ran smoothly but, Intellij kept complaining about unfulfilled @Autowire
dependencies. As soon as I changed back to using @Configuration
, @EnableAutoConfiguration
and @ComponentScan
separately, the errors ceased. It seems Intellij 14.0.3 (and most likely, earlier versions too) is not yet configured to recognise the @SpringBootApplication
annotation.
For now, if the errors disturb you that much, then revert back to those three separate annotations. Otherwise, ignore Intellij...your dependency resolution is correctly configured, since your test passes.
Always remember... > Man is always greater than machine.
Solution 2 - Java
Add Spring annotation @Repository
over the repository class.
I know it should work without this annotation. But if you add this, IntelliJ will not show error.
@Repository
public interface YourRepository ...
...
If you use Spring Data with extending Repository
class it will be conflict pagkages. Then you must indicate explicity pagkages.
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
And next you can autowired your repository without errors.
@Autowired
YourRepository yourRepository;
It probably is not a good solution (I guess you are trying to register repositorium twice). But work for me and don't show errors.
Maybe in the new version of IntelliJ can be fixed: https://youtrack.jetbrains.com/issue/IDEA-137023
Solution 3 - Java
My version of IntelliJ IDEA Ultimate (2016.3.4 Build 163) seems to support this. The trick is that you need to have enabled the Spring Data plugin.
Solution 4 - Java
Sometimes you are required to indicate where @ComponentScan should scan for components. You can do so by passing the packages as parameter of this annotation, e.g:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
However, as already mentioned, @SpringBootApplication annotation replaces @ComponentScan, hence in such cases you must do the same:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
At least in my case, Intellij stopped complaining.
Solution 5 - Java
I always solve this problem doing de following.. Settings>Inspections>Spring Core>Code than you shift from error to warning the severity option
Solution 6 - Java
I am using spring-boot 2.0, and intellij 2018.1.1 ultimate edition and I faced the same issue.
I solved by placing @EnableAutoConfiguration in the main application class
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Solution 7 - Java
Check if you missed @Service annotation in your service class, that was the case for me.
Solution 8 - Java
Putting @Component
or @configuration
in your bean config file seems to work, ie something like:
@Configuration
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
@Component
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
Solution 9 - Java
Solution 10 - Java
Have you checked that you have used @Service
annotation on top of your service implementation?
It worked for me.
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserServices {}
Solution 11 - Java
Use @EnableAutoConfiguration
annotation with @Component
at class level. It will resolve this problem.
For example:
@Component
@EnableAutoConfiguration
public class ItemDataInitializer {
@Autowired
private ItemReactiveRepository itemReactiveRepository;
@Autowired
private MongoOperations mongoOperations;
}
Solution 12 - Java
If you don't want to make any change to you code just to make your IDE happy. I have solved it by adding all components to the Spring facet.
- Create a group with name "Service, Processors and Routers" or any name you like;
- Remove and recreate "Spring Application Context" use the group you created previously as a parent.
Solution 13 - Java
For me the solution was to place @EnableAutoConfiguration
in the Application class under the @SpringBootApplication
its going to underline it because its redundant. Delete it and voila all you warnings regarding missing beans are vanished! Silly Spring...
Solution 14 - Java
As long as your tests are passing you are good, hit alt + enter
by taking the cursor over the error and inside the submenu of the first item you will find Disable Inspection
select that
Solution 15 - Java
And one last piece of important information - add the ComponentScan
so that the app knows about the things it needs to wire. This is not relevant in the case of this question. However if no @autowiring
is being performed at all then this is likely your solution.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Solution 16 - Java
I am using this annotation to hide this error when it appears in IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
Solution 17 - Java
I had similar issue in Spring Boot application. The application utilizes Feign (HTTP client synthetizing requests from annotated interfaces). Having interface SomeClient
annotated with @FeignClient
, Feign generates runtime proxy class implementing this interface. When some Spring component tries to autowire bean of type SomeClient
, Idea complains no bean of type SomeClient
found since no real class actually exists in project and Idea is not taught to understand @FeignClient
annotation in any way.
Solution: annotate interface SomeClient
with @Component
. (In our case, we don't use @FeignClient
annotation on SomeClient
directly, we rather use metaannotation @OurProjectFeignClient
which is annotated @FeignClient
and adding @Component
annotation to it works as well.)
Solution 18 - Java
simple you have to do 2 steps
- add hibernate-core dependency
- change
@Autowired
to@Resource
.
==>> change @Autowired to @Resource
Solution 19 - Java
As most synchronisation errors between IntelliJ (IDE) and development environments.
Specially if you have automated tests or build that pass green all the way through.
Invalidate Cache and Restart solved my problem.
Solution 20 - Java
What you need to do is add
@ComponentScan("package/include/your/annotation/component")
in AppConfiguration.java
.
Since I think your AppConfiguraion.java
's package is deeper than your annotation component (@Service, @Component...)'s package,
such as "package/include/your/annotation/component/deeper/config"
.
Solution 21 - Java
I had a similar problem in my application. When I added annotations incorrect highliting dissapeared.
@ContextConfiguration(classes = {...})
Solution 22 - Java
in my Case, the Directory I was trying to @Autowired was not at the same level,
after setting it up at the same structure level, the error disappeared
hope it can helps some one!
Solution 23 - Java
IntelliJ IDEA Ultimate
Add your main class to IntelliJ Spring Application Context, for example Application.java
File
-> Project Structure..
left side: Project Setting -> Modules
right side: find in your package structure
Spring
and add +
Application.java
Solution 24 - Java
just add below two annotations to your POJO.
@ComponentScan
@Configuration
public class YourClass {
//TODO
}
Solution 25 - Java
My solution to this issue in my spring boot application was to open the spring application context and adding the class for the missing autowired bean manually!
(access via Project Structure menu or spring tool window... edit "Spring Application Context")
So instead of SpringApplicationContext just containing my ExampleApplication spring configuration it also contains the missing Bean:
SpringApplicationContext:
- ExampleApplication.java
- MissingBeanClass.java
et voilà: The error message disappeared!
Solution 26 - Java
This seems to still be a bug in the latest IntelliJ and has to do with a possible caching issue?
If you add the @Repository annotation as mk321 mentioned above, save, then remove the annotation and save again, this fixes the problem.
Solution 27 - Java
All you need to do to make this work is the following code:
@ComponentScan
public class PriceWatchTest{
@Autowired
private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}
Solution 28 - Java
Sometimes - in my case that is - the reason is a wrong import. I accidentally imported
import org.jvnet.hk2.annotations.Service
instead of
import org.springframework.stereotype.Service
by blindly accepting the first choice in Idea's suggested imports. Took me a few minutes the first time it happend :-)
Solution 29 - Java
I just had to use @EnableAutoConfiguration to address it, however this error had no functional impact.
Solution 30 - Java
It can be solved by placing @EnableAutoConfiguration on spring boot application main class.
Solution 31 - Java
in my situation my class folder was in wrong address so check if your class is in correct package.
Solution 32 - Java
add the annotation @Service
to your Repository class and it should work.
Solution 33 - Java
I was having the same problem and solved it using "Invalidate Caches..." under the File menu.
Solution 34 - Java
I was having the issue. Just use
@SpringBootTest
@AutoConfigureMockMvc
annotation with the test class.
Solution 35 - Java
Surprisingly, A Feign oriented project that successfully ran with Eclipse could not run in InteliJ. When started the application, InteliJ complained about the Feign client I tried to inject to the serviceImpl layer saying: field personRestClient (my Feign client) in ... required a bean of type ... that could not be found. Consider defining a bean of type '....' in your configuration.
I wasted a long time trying to understand what is wrong. I found a solution (for InteliJ) which I do not completely understand:
- Alt Shift F10 (or run menu)
- Select 'Edit configuration'
- In configuration window, Check the checkbox 'include dependencies with "Provided" scope'
- Run your application
Or choose Eclipse :)
Solution 36 - Java
Check if the package of your bean is written correctly
//Check if this is written right
package com.package1.package2.package3
import ...
@Service
class ServiceX {
...
}
Solution 37 - Java
Use @AutoConfigureMockMvc for test class.
Solution 38 - Java
I solved the problem by installing mybatis plugin in IDEA. When I installed Mybatis Plugin, it disappeared.
Solution 39 - Java
I have a ServerService.java
class. That's not been assigned as a @Bean
, due to that have got this issue.
@SpringBootApplication
public class HelloServerApplication {
public static void main(String[] args) {
SpringApplication.run(HelloServerApplication.class, args);
}
@Bean
public ServerService getServerService() {
return new ServerService();
}
}
In order to create bean and inject it class in spring framework, Class
should be marked with @Componet, @Service or @Repository in class level accordingly. Make sure you have used it.
Solution 40 - Java
Solution 41 - Java
File -> Settings(Ctrl+Alt+S) -> Plugins -> Spring Boot Assistant -> install -> Ok
Solution 42 - Java
I encountered this issue too, and resolved it by the removing Spring Facet:
- File -> Project Structure
- Select
Facets
- Remove Spring
Good luck!