복붙노트

[SPRING] 설정에서 'service'타입의 bean 정의 [Spring boot]

SPRING

설정에서 'service'타입의 bean 정의 [Spring boot]

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

오류:

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 인터페이스 :

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

해결법

  1. ==============================

    1.클래스는 @Component 어노테이션 또는 그 파생물 (예 : @Service, @Repository 등)이 컴포넌트 스캔에 의해 Spring 빈으로 인식되도록해야합니다. 따라서 @Component를 클래스에 추가하면 문제가 해결됩니다.

    클래스는 @Component 어노테이션 또는 그 파생물 (예 : @Service, @Repository 등)이 컴포넌트 스캔에 의해 Spring 빈으로 인식되도록해야합니다. 따라서 @Component를 클래스에 추가하면 문제가 해결됩니다.

  2. ==============================

    2.TopicService는 Service 클래스이므로 @Service로 주석을 달아 Spring이이 bean을 자동으로 호출하도록해야한다. 이렇게 :

    TopicService는 Service 클래스이므로 @Service로 주석을 달아 Spring이이 bean을 자동으로 호출하도록해야한다. 이렇게 :

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

    이렇게하면 문제가 해결됩니다.

  3. ==============================

    3.당신은 그 자체로 빈을 주입하려고 시도하고있다. 그것은 분명히 작동하지 않을 것입니다.

    당신은 그 자체로 빈을 주입하려고 시도하고있다. 그것은 분명히 작동하지 않을 것입니다.

    TopicServiceImplementation은 TopicService를 구현합니다. 이 클래스는`TopicService '를 (필드에 의해) 자동으로 시도합니다. 그래서 본질적으로 자신에게 주입하는 맥락을 요구하고 있습니다.

    오류 메시지의 내용을 편집 한 것 같습니다. 필드 topicService in seconds47.restAPI.topics는 클래스가 아닙니다. 민감한 정보를 숨기려면 다른 사람들이 귀하를 도와주기가 더 어려워 지므로주의하십시오.

    실제 문제로 되돌아 가면, TopicService 자체를 주입하는 것이 당신 편이라고 생각합니다.

  4. ==============================

    4.나는 손상된 jar 파일을 대체하여 해결했습니다.

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

    그러나 손상된 jar 파일을 찾으려면 세 가지 IDE-1) Intellij 아이디어 2) NetBeans 3) Eclipse에서 응용 프로그램을 실행해야합니다.

    Netbeans가 손상된 항아리의 최대 개수에 대한 정보를 나에게주었습니다. Netbeans에서는 실행과 함께 빌드 된 옵션을 사용하여 프로젝트를 마우스 오른쪽 버튼으로 클릭 한 후 손상된 항아리에 대해 자세히 알아 봅니다.

    이러한 오류의 근본 원인을 파악하는 데 15 시간 이상이 걸렸습니다. 희망이 사람을 도웁니다.

  5. ==============================

    5.당신은

    당신은

    scanBasePackages = { "com.exm.java" }
    

    서비스에 경로를 추가하려면 (서비스에 주석을 첨부 한 후)

  6. from https://stackoverflow.com/questions/41663652/consider-defining-a-bean-of-type-service-in-your-configuration-spring-boot by cc-by-sa and MIT license