Reputation: 7018
I get error when I run the main class.
Error:
Action:
Consider defining a bean of type 'seconds47.service.TopicService' in your configuration.
Description:
Field topicService in seconds47.restAPI.topics required a bean of type 'seconds47.service.TopicService' that could not be found
TopicService interface:
public interface TopicService {
TopicBean findById(long id);
TopicBean findByName(String name);
void saveTopic(TopicBean topicBean);
void updateTopic(TopicBean topicBean);
void deleteTopicById(long id);
List<TopicBean> findAllTopics();
void deleteAllTopics();
public boolean isTopicExist(TopicBean topicBean);
}
controller:
@RestController
public class topics {
@Autowired
private TopicService topicService;
@RequestMapping(path = "/new_topic2", method = RequestMethod.GET)
public void new_topic() throws Exception {
System.out.println("new topic JAVA2");
}
}
Implementation class:
public class TopicServiceImplementation implements TopicService {
@Autowired
private TopicService topicService;
@Autowired
private TopicRepository topicRepository;
@Override
public TopicBean findById(long id) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public TopicBean findByName(String name) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void saveTopic(TopicBean topicBean) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void updateTopic(TopicBean topicBean) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void deleteTopicById(long id) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public List<TopicBean> findAllTopics() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void deleteAllTopics() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean isTopicExist(TopicBean topicBean) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
Rest of the classes are defined too. I don't know why its throwing despite declaring componentScan
in main class.
Main class:
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
@ComponentScan(basePackages = {"seconds47"})
@EnableJpaRepositories("seconds47.repository")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
I have my packages like this:
seconds47
seconds47.beans
seconds47.config
seconds47.repository
seconds47.restAPI
seconds47.service
Upvotes: 50
Views: 272808
Reputation: 439
I once ran into a similar problem. You can annotate the service class with @Component
and the @SpringBootApplication
at Main should carry @SpringBootApplication(ScanBasePackages="com.seconds47")
Upvotes: 0
Reputation: 904
I fixed the problem adding this line @ComponentScan(basePackages = {"com.example.DemoApplication"})
to main class file, just up from the class name
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.DemoApplication"})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Upvotes: 13
Reputation: 12471
I just have this issue and this is the solution. Firstly, create an interface as below:
public interface TransactionService {
}
Then implement the methods using a class:
@Service
public class TransactionServiceImpl implements TransactionService {
}
Upvotes: 2
Reputation: 1630
In case you were wondering where to add @Service
annotation, then
make sure you have added @Service
annotation to the class that implements the interface. That would solve this problem.
Upvotes: 4
Reputation: 11
Even after doing all the method suggested, i was getting the same error. After trying hard, i got to know that hibernate's maven dependency was added in my pom.xml, as i removed it, application started successfully.
I removed this dependency:
<dependency> <groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>
Upvotes: 1
Reputation: 123
@SpringBootApplication @ComponentScan(basePackages = {"io.testapi"})
In the main class below springbootapplication annotation i have written componentscan and it worked for me.
Upvotes: 2
Reputation: 51
Consider defining a bean of type 'moviecruser.repository.MovieRepository' in your configuration.
This type of issue will generate if you did not add correct dependency. Its the same issue I faced but after I found my JPA dependency is not working correctly, so make sure that first dependency is correct or not.
For example:-
The dependency I used:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
</dependency>
Description (got this exception):-
Parameter 0 of constructor in moviecruser.serviceImple.MovieServiceImpl required a bean of type 'moviecruser.repository.MovieRepository' that could not be found.
Action:
After change dependency:-
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Response:-
2019-09-06 23:08:23.202 INFO 7780 -
[main]moviecruser.MovieCruserApplication]:Started MovieCruserApplication in 10.585 seconds (JVM running for 11.357)
Upvotes: 5
Reputation: 571
I solved this issue by creating a bean for my service in SpringConfig.java file. Please check the below code,
@Configuration
public class SpringConfig {
@Bean
public TransactionService transactionService() {
return new TransactionServiceImpl();
}
}
The path of this file is shown in the below image, Spring boot application folder structure
Upvotes: 7
Reputation: 39
Please make sure that you have added the dependency in pom.xml or gradle file
spring-boot-starter-data-jpa
Upvotes: 0
Reputation: 31
I resolved by replacing the corrupted jar files.
But to find those corrupted jar files, I have to run my application in three IDE- 1) Intellij Idea 2)NetBeans 3) Eclipse.
Netbeans given me information for maximum number of corrupted jar. In Netbeans along with the run, I use the build option(after right clicking on project) to know more about corrupted jars.
It took me more than 15 hours to find out the root cause for these errors. Hope it help anyone.
Upvotes: 3
Reputation: 31
You have to update your
scanBasePackages = { "com.exm.java" }
to add the path to your service (after annotating it with @service )
Upvotes: 3
Reputation: 1038
Since TopicService
is a Service
class, you should annotate it with @Service
, so that Spring autowires this bean for you. Like so:
@Service
public class TopicServiceImplementation implements TopicService {
...
}
This will solve your problem.
Upvotes: 12
Reputation: 44555
A class must have the @Component
annotation or a derivation of that (like @Service
, @Repository
etc.) to be recognized as a Spring bean by the component scanning. So if you add @Component
to the class, it should solve your problem.
Upvotes: 68
Reputation: 33151
You are trying to inject a bean in itself. That's obviously not going to work.
TopicServiceImplementation
implements TopicService
. That class attempts to autowire (by field!) a `TopicService. So you're essentially asking the context to inject itself.
It looks like you've edited the content of the error message: Field topicService in seconds47.restAPI.topics
is not a class. Please be careful if you need to hide sensitive information as it makes it much harder for others to help you.
Back on the actual issue, it looks like injecting TopicService
in itself is a glitch on your side.
Upvotes: 4