'필드는 찾을 수 없는 유형의 빈을 필요로 했습니다.' mongodb를 사용한 오류 스프링 restful API입니다.
그래서 나는 봄을 일주일 동안 배우고 이 튜토리얼을 따라하고 있다.
내가 그것을 mongodb에 통합하려고 하기 전까지는 모든 것이 좋았다.그래서 저는 이 튜토리얼을 따릅니다.
하지만 제 연습은 여전히 첫 번째 것을 부분적으로 사용하고 있습니다.제 프로젝트 디렉토리 구조는 이렇습니다.
src/
├── main/
│ └── java/
| ├── model/
| | └── User.java
| ├── rest/
| | ├── Application.java
| | ├── IndexController.java
| | └── UsersController.java
| └── service/
| └── UserService.java
└── resources/
└── application.properties
이것은 my model/User.java 파일입니다.
package main.java.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection="user")
public class User {
private int age;
private String country;
@Id
private String id;
private String name;
public User() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
이것은 나의 rest/UsersController.java 파일입니다.
package main.java.rest;
import java.util.List;
import main.java.service.UserService;
import main.java.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/users")
public class UsersController {
@Autowired
UserService userService;
@RequestMapping(method = RequestMethod.GET)
public List<User> getAllUsers() {
return userService.findAll();
}
}
이것은 나의 service/UserService.java 파일입니다.
package main.java.service;
import java.util.List;
import main.java.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserService extends MongoRepository<User, String> {
public List<User> findAll();
}
컴파일은 할 수 있지만(자습서를 따르기 때문에 gradle을 사용하여 컴파일을 하고 있습니다), jar 파일을 실행하면 이 에러가 발생합니다.
응용 프로그램 부팅 실패
설명:
필드 userService in main.java.rest.UsersController에는 'main.java.service' 유형의 빈이 필요합니다.UserService'를 찾을 수 없습니다.
액션:
main.java.service 유형의 빈을 정의하는 것을 고려해 보십시오.사용자 서비스'를 선택합니다.
가 잘 요.Beans.xml
userService service록록 。★★★★★★★★★★★★★★★★★★★★★★★★★★★저는 이런 일이 처음이라 무슨 일이 일어나고 있는지 정말 모르겠어요.
모든 가 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★@SpringBootApplication
선언이 스캔 됩니다.
의 주요 수업을 ExampleApplication
가지고 있다@SpringBootApplication
에서 com.example.something
com.example.something
는, 「」로 스캔 .com.example.applicant
스캔되지 않습니다.
그래서 이 질문을 바탕으로 두 가지 방법이 있습니다.사용하다
@SpringBootApplication(scanBasePackages={
"com.example.something", "com.example.application"})
그러면 어플리케이션은 지정된 컴포넌트를 모두 스캔합니다만, 스케일이 커지면 어떻게 될까요?
그래서 저는 패키지를 재구성하는 두 번째 방법을 사용했고, 그것은 효과가 있었습니다! 이제 제 패키지 구조는 이렇게 되었습니다.
src/
├── main/
│ └── java/
| ├── com.example/
| | └── Application.java
| ├── com.example.model/
| | └── User.java
| ├── com.example.controller/
| | ├── IndexController.java
| | └── UsersController.java
| └── com.example.service/
| └── UserService.java
└── resources/
└── application.properties
, 그럼 여기에다가 더해져요.@Service
service/UserService로 합니다.자바
저도 같은 오류가 있었습니다.
***************************
APPLICATION FAILED TO START
***************************
Description:
Field repository in com.kalsym.next.gen.campaign.controller.CampaignController required a bean of type 'com.kalsym.next.gen.campaign.data.CustomerRepository' that could not be found.
Action:
Consider defining a bean of type 'com.kalsym.next.gen.campaign.data.CustomerRepository' in your configuration.de here
그리고 제 패키지는 수용된 답변과 같은 방식으로 구성되었습니다.메인 클래스에 다음과 같이 EnableMongoRepository 주석을 추가하여 문제를 해결했습니다.
@SpringBootApplication
@EnableMongoRepositories(basePackageClasses = CustomerRepository.class)
public class CampaignAPI {
public static void main(String[] args) {
SpringApplication.run(CampaignAPI.class, args);
}
}
여러 개를 추가해야 할 경우 중괄호를 잊지 마십시오.
@EnableMongoRepositories(basePackageClasses
= {
MSASMSRepository.class, APartyMappingRepository.class
})
해서 '어울리지 않다'를 해요.@Service
서비스 구현에 대한 주석입니다.
같은 문제를 안고 있었습니다.@Autowired
컨롤컨 Annotation이 "Autowired 을할 필요가 .@Autowired
제 경험에서 나온 주석입니다.
수입하다 Intellij Idea somewhy imported Intelij Idea Import 이유@Service
부에서import org.jvnet.hk2.annotations.Service;
대 대신에import org.springframework.stereotype.Service;
!!!!
같은 문제가 발생하여 어플리케이션을 서비스, dao 및 도메인 패키지보다 한 단계 높은 패키지에 넣기만 하면 되었습니다.
이 스레드는 이제 오래되었지만 다른 사람에게 도움이 될 수 있도록 답변을 게시합니다.
저도 같은 문제가 있었어요.다른 모듈에도 같은 이름의 클래스가 있는 것으로 나타났습니다.나는 그 반의 이름을 바꾸었고 그것이 문제를 해결했다.
spring to create bean and inject it class 에는 @Componet,@service 또는 @Repository 중 하나가 표시되어 있어야 합니다.이러한 문맥에서는 다음과 같습니다.
package main.java.service;
import java.util.List;
import main.java.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;
@Repository
public interface UserService extends MongoRepository<User, String> {
public List<User> findAll();
}
일반적으로 이 문제는 다음 두 가지 측면에서 해결할 수 있습니다.
- 스프링 부츠에 적절한 주석을 사용하여 콩을 스캔해야 합니다.
@Component
;;;; - 검색 경로에는 위에 언급된 다른 모든 클래스가 포함됩니다.
덧붙여서 @Component, @Repository, @Service, @Controller의 차이에 대해서는 매우 좋은 설명이 있습니다.
dao 클래스에 @Repository 추가
예:
@Repository
public class DaoClassName implements IIntefaceDao {
}
나는 똑같은 문제를 가지고 있었다.저도 같은 문제가 있었어요.가 해서 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★@Service
이치노@Service
ServiceImpl 클클im 。
@ Annotations를 모두 사용하여 문제를 해결했습니다.(예, 봄을 맞이했습니다.)서비스 클래스를 사용하는 경우 @Service를 추가합니다.@Controller 및 @Repository도 마찬가지입니다.
그 후 App.java의 이 주석으로 문제가 해결되었습니다(JPA + 휴지 상태 사용 중).
@SpringBootApplication
@EnableAutoConfiguration(exclude = { ErrorMvcAutoConfiguration.class })
@ComponentScan(basePackages = {"es.unileon.inso2"})
@EntityScan("es.unileon.inso2.model")
@EnableJpaRepositories("es.unileon.inso2.repository")
패키지 트리:
src/
├── main/
│ └── java/
| ├── es.unileon.inso2/
| | └── App.java
| ├── es.unileon.inso2.model/
| | └── User.java
| ├── es.unileon.inso2.controller/
| | ├── IndexController.java
| | └── UserController.java
| ├── es.unileon.inso2.service/
| | └── UserService.java
| └── es.unileon.inso2.repository/
| └── UserRepository.java
└── resources/
└── application.properties
.spring-boot-starter-data-jpa
부츠프링 부츠를 이 됩니다.
컨트롤러 클래스에 @Component를 추가합니다.이 일이 잘 되길
일반적인 bean 에러 메시지를 구글에 검색하여 가져온 사용자 중 실제로 Spring Boot 어플리케이션에 가짜 클라이언트를 추가하려고 하는 사용자용입니다.@FeignClient
클라이언트 인터페이스에 주석을 붙이면 위의 어떤 솔루션도 작동하지 않습니다.
이 문제를 해결하려면 , 다음의 명령어를 추가해야 합니다.@EnableFeignClients
다음과 같이 Application 클래스에 주석을 추가합니다.
@SpringBootApplication
// ... (other pre-existing annotations) ...
@EnableFeignClients // <------- THE IMPORTANT ONE
public class Application {
이 방법으로 수정은 다음과 같습니다.@EnableMongoRepositories
를 수정해 주세요.이 일반적인 오류 메시지가 모든 상황에 맞게 수정되어야 하는 것은 유감입니다.
Mongo Repository에서 Spring Webflux를 사용하면서 도움을 요청하러 왔습니다.
내 오류는 소유자와 비슷했다.
Field usersRepository in foobar.UsersService required
a bean of type 'foobar.UsersRepository' that could not be found.
이전에 Spring MVC에서 작업하고 있었기 때문에 이 에러에 놀랐습니다.
도움을 찾는다는 것이 그렇게 명백하지 않았기 때문에, 이 질문은 다소 관련이 있고 검색 결과에서 이 질문이 높기 때문에 저는 이 질문에 대답합니다.
먼저, 수락이라고 표시된 답변에 언급된 내용, 즉 패키지 계층에 대해 기억해야 합니다.
두 번째로 중요한 것은 만약 당신이 Webflux를 사용한다면 당신은 봄 MVC를 사용할 때 다른 패키지를 사용해야 한다는 것입니다. 예를 들어, MongoDB를 위한 추가가 필요합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
마지막에는 -syslog가 있습니다.
@EnableMongoRepository("in.top3.util")를 추가하여 동일한 문제가 해결되었습니다.
package in.topthree.core;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import in.topthree.util.Student;
@SpringBootApplication
@EnableMongoRepositories("in.topthree.util")
public class Run implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(Run.class, args);
System.out.println("Run");
}
@Autowired
private Process pr;
@Override
public void run(String... args) throws Exception {
pr.saveDB(new Student("Testing", "FB"));
System.exit(0);
}
}
내 저장소는 다음과 같습니다.
package in.topthree.util;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface StudentMongo extends MongoRepository<Student, Integer> {
public Student findByUrl(String url);
}
기능하게 되었다
몇 시간 동안이나 문제가 궁금했어요.그 이유는 명령어를 제외한 것입니다.이전에 테스트용으로 이것을 추가했습니다(그때 잊어버렸습니다).나는 누군가 같은 실수를 할 수 있다고 확신한다.
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
...수정:
@SpringBootApplication
주 클래스에 a를 추가해야 합니다.@ComponentScan
주석, 서비스 패키지를 검색하도록 지시합니다.그렇지 않으면 이러한 빈이 초기화되지 않습니다.
추가할 수 있습니다.@Service
서비스 클래스를 정의하는 경우
예:
@Service
public class myService {
public String getData(){
return "some data";
}
}
이것은 두 개의 콩이 같은 이름을 가지고 있을 때 발생할 수 있다.
Module1Beans.java
:
@Configuration
public class Module1Beans {
@Bean
public GoogleAPI retrofitService(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://www.google.com/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
return retrofit.create(GoogleAPI.class);
}
}
Module2Beans.java
:
@Configuration
public class Module2Beans {
@Bean
public GithubAPI retrofitService(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://www.github.com/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
return retrofit.create(GithubAPI.class);
}
}
이름붙인 콩retrofitService
처음 생성되고 그 유형은GoogleAPI
에 의해 커버됩니다.GithubAPI
왜냐하면 둘 다 에 의해 만들어졌기 때문이다.retrofitService()
방법.자, 당신이@Autowired
a GoogleAPI
메시지가 올 예요.Field googleAPI in com.example.GoogleService required a bean of type 'com.example.rest.GoogleAPI' that could not be found.
대상 폴더의 Mapper 구현 클래스가 삭제되었기 때문에 Mapper 인터페이스에는 더 이상 구현 클래스가 없습니다.요.Field *** required a bean of type ***Mapper that could not be found.
메이븐으로 맵의 실장을 재생성하고 프로젝트를 갱신하기만 하면 되었습니다.
dao 클래스에 @Repository 추가
@Repository
public interface UserDao extends CrudRepository<User, Long> {
User findByUsername(String username);
User findByEmail(String email);
}
이 오류를 디버깅하는 데 약 2시간을 소비한 후 스프링 웹 MVC 종속성을 추가하는 것을 잊어버린 것을 어느 정도 알게 되었습니다.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
제 경우 Class My project Application을 동일한 수준의 모델, 컨트롤러, 서비스 패키지로 패키지(com.example.start)에 넣었습니다.
오래된 건 알지만 내 5센트를 더하고 싶어
하였습니다..service
★★★★★★★★★★★★★★★★★」.service.impl
폴더 구조에서 서비스를 구현과 분리할 수 있습니다.서비스 구현 부분을 구현하는 것을 잊으십시오.
이 메시지는 다음과 같습니다.
org.apache.wicket.WicketRuntimeException: Can't instantiate page using constructor 'public org.package.MyClass(org.apache.wicket.request.mapper.parameter.PageParameters)' and argument ''. Might be it doesn't exist, may be it is not visible (public).
"위킷 유닛 테스트에서는 콩을 수동으로 넣어야 합니다."를 의미합니다.
appContext.putBean(myClass);
여기서 모든 절차와 지시에 따라 OP를 실행하고 사용자 이름과 비밀번호 주변의 빈칸을 처리했습니다(스프링이 속성 파일의 빈칸을 처리함에도 불구하고).
could not find bean for ___Repository
(JPARepository를 확장하는 인터페이스)
또는 @EnableJ를 추가한 후PAREpository
could not find bean for EntityManagerFactory
pom.xml에서 spring boot starter 부모 버전을 2.3.2에서 2.2.1로 변경하여 해결했습니다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
다음 종속성을 추가합니다.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
다음 중 하나를 추가할 필요가 없었습니다.스프링 부트는 그 자체로 할 수 있습니다.
- @EnableJPareposity - 이미 모든 클래스에서 동일한 루트 패키지가 사용되었기 때문에
- application.properties에서 spring.data.jpa.intervatorys.enabled로 되어 있습니다.
- spring.datasource.driverClassName=com.mysql.jdbc 를 지정합니다.응용 프로그램 속성 드라이버
2종류의 mongo 의존관계:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
두 가지 유형의 저장소 -
MongoRepository
ReactiveMongoRepository
올바른 조합을 사용하고 있는지 확인하십시오.
언급URL : https://stackoverflow.com/questions/42907553/field-required-a-bean-of-type-that-could-not-be-found-error-spring-restful-ap
'programing' 카테고리의 다른 글
복소 각도 jng 클래스 (0) | 2023.03.12 |
---|---|
워드프레스:첨부 파일 필드 제거 (0) | 2023.03.12 |
고유한 필터와 함께 Oracle의 LISTAGG 함수를 사용하는 방법은 무엇입니까? (0) | 2023.03.12 |
'or' 조건을 가진 MongoDB 쿼리 (0) | 2023.03.12 |
큰 리덕스 상태가 애플리케이션의 퍼포먼스에 영향을 미칩니까? (0) | 2023.03.12 |