programing

구성에서 '서비스' 유형의 빈을 정의하는 것을 고려합니다[스프링 부트]

newsource 2023. 3. 26. 11:25

구성에서 '서비스' 유형의 빈을 정의하는 것을 고려합니다[스프링 부트]

메인 클래스를 실행할 때 오류가 발생합니다.

오류:

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

토픽 서비스 인터페이스:

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);
}

컨트롤러:

@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");
    }
}

구현 클래스:

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.
    }
}

나머지 클래스도 정의되어 있습니다.던졌는지 모르겠다componentScan주 수업 시간에

메인 클래스:

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
@ComponentScan(basePackages = {"seconds47"})
@EnableJpaRepositories("seconds47.repository")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

다음과 같은 패키지가 있습니다.

seconds47
seconds47.beans
seconds47.config
seconds47.repository
seconds47.restAPI
seconds47.service

에는 반드시 '클래스'가 .@Component 그예: 주석:@Service,@Repository부품 스캔에 의해 스프링빈으로 인식된다.그래서 만약 당신이 추가한다면@Component수업시간에, 그것은 당신의 문제를 해결할 것입니다.

할 때 되었습니다.@ComponentScan(basePackages = {"com.example.DemoApplication"})로, 클래스 이름에서 위로.

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);
    }

}

★★TopicService는 입니다.Service클래스라고 합니다.@Service봄이가 당신을 위해 이 콩을 자동 공급하도록.다음과 같이 합니다.

@Service
public class TopicServiceImplementation implements TopicService {
    ...
}

이것으로 당신의 문제가 해결됩니다.

SpringConfig.java 파일에 서비스용 bean을 생성하여 이 문제를 해결했습니다.아래 코드를 확인해 주세요.

@Configuration 
public class SpringConfig { 

@Bean
public TransactionService transactionService() {
    return new TransactionServiceImpl();
}

}

이 파일의 경로는 다음 이미지 Spring boot application 폴더 구조에 나와 있습니다.

당신은 콩을 그 자체로 주입하려고 합니다.그건 분명히 효과가 없을 거야.

TopicServiceImplementation를 실장하다TopicService토픽 서비스입니다.즉, 기본적으로 컨텍스트에 스스로 주입을 요구하는 것입니다.

메시지 것 .Field topicService in seconds47.restAPI.topics클래스가 아닙니다.민감한 정보를 숨기려면 다른 사람이 도와주기 훨씬 어렵기 때문에 주의하세요.

실제 이슈로 돌아가면, 주사하는 것 같아요TopicService그 자체가 자네 쪽에 결함이 있는 거야

moviecruser.repository 유형의 빈을 정의하는 것을 고려해 보십시오.Movie Repository'를 선택합니다.

올바른 종속성을 추가하지 않은 경우 이러한 유형의 문제가 발생합니다.같은 문제에 직면했지만 JPA 의존관계가 올바르게 기능하지 않는 것을 알게 된 후 첫 번째 의존관계가 올바른지 확인하십시오.

예를 들어 다음과 같습니다.

사용한 의존관계:

    <dependency>
       <groupId>org.springframework.data</groupId>      
       <artifactId>spring-data-jpa</artifactId>
    </dependency>

설명(이 예외 포함):-

moviecruser에서 컨스트럭터의 파라미터 0.service Imple.MovieServiceImpl에는 'moviecruser.repository' 유형의 빈이 필요합니다.MovieRepository'를 찾을 수 없습니다.

액션:

변경 후 의존관계:-

    <!-- 
    <dependency>
       <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

응답:-

7780-2019-09-06 23:08:23.202 INFO 7780 -
[main] crcruser.MovieCruser 응용 프로그램]:MovieCruser Application을 10.585초 만에 시작 (JVM은 11.357 동안 실행)

어디에 추가해야 할지 궁금하신 경우@Service주석을 추가한 다음 추가했는지 확인합니다.@Service classthat에 대한 주석이 인터페이스를 구현합니다.그러면 이 문제가 해결될 거예요.

이 기능을 업데이트해야 합니다.

scanBasePackages = { "com.exm.java" }

서비스에 경로를 추가합니다(@service로 주석을 추가한 후).

손상된 jar 파일을 교체하여 해결했습니다.

그러나, 이러한 파손된 jar 파일을 찾으려면 , 3 개의 IDE - 1) Intelij Idea 2) NetBeans 3) Eclipse에서 애플리케이션을 실행할 필요가 있습니다.

깨진 항아리의 최대 개수에 대한 정보를 넷콩이 제공했습니다.Netbeans에서는 실행과 함께 빌드 옵션(프로젝트 오른쪽 클릭 후)을 사용하여 파손된 항아리에 대해 자세히 알아봅니다.

이러한 오류의 근본 원인을 찾는 데 15시간 이상이 걸렸습니다.도움이 됐으면 좋겠다.

@SpringBootApplication @ComponentScan(basePackages = {"io.testapi"})

아래 springboot 어플리케이션 주석에서는 컴포넌트가 작성되어 있으며, 이것이 나에게 효과가 있었습니다.

제시된 방법을 모두 사용했는데도 같은 오류가 발생했어요.열심히 노력한 결과, pom.xml에 hibernate의 maven 의존성이 추가되어 있는 것을 알게 되었고, 그것을 삭제하자 어플리케이션이 정상적으로 기동했습니다.

이 의존관계를 삭제했습니다.

<dependency> <groupId>org.hibernate.javax.persistence</groupId>
 <artifactId>hibernate-jpa-2.0-api</artifactId>
             <version>1.0.1.Final</version>
         </dependency>

나는 단지 이 문제가 있고 이것이 해결책이다.먼저 다음과 같이 인터페이스를 만듭니다.

public interface TransactionService {

}

그런 다음 클래스를 사용하여 메서드를 구현합니다.

@Service
public class TransactionServiceImpl implements TransactionService {

}

pom.xml 또는 gradle 파일에 종속성을 추가했는지 확인하십시오.

spring-boot-data-jpa

저도 비슷한 문제에 부딪힌 적이 있어요.서비스 클래스에 주석을 달 수 있습니다.@Component및 그@SpringBootApplication메인으로 이동해야 합니다.@SpringBootApplication(ScanBasePackages="com.seconds47")

언급URL : https://stackoverflow.com/questions/41663652/consider-defining-a-bean-of-type-service-in-your-configuration-spring-boot