web-dev-qa-db-ja.com

設定で「サービス」タイプのBeanを定義することを検討してください[春ブート]

メインクラスを実行するとエラーが発生します。

エラー:

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
19
kittu

コンポーネントのスキャンによってSpring Beanとして認識されるためには、クラスに@Componentアノテーションまたはその派生(@Service@Repositoryなど)が必要です。したがって、@Componentをクラスに追加すると、問題が解決するはずです。

33
dunni

TopicServiceServiceクラスなので、@Serviceアノテーションを付けて、SpringがこのBeanを自動配線するようにしてください。そのようです:

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

これで問題が解決します。

6
Ahmed Tawila

Bean自体を注入しようとしています。それは明らかに機能しません。

TopicServiceImplementationTopicServiceを実装します。そのクラスは、「TopicService」を(フィールドで!)自動配線しようとします。したがって、本質的にはコンテキストに自分自身を挿入するように要求しています。

エラーメッセージの内容を編集したようです:Field topicService in seconds47.restAPI.topicsはクラスではありません。機密情報を非表示にする必要がある場合は、他の人があなたを助けるのが非常に難しくなるので注意してください。

実際の問題に戻ると、TopicServiceを挿入すること自体があなたの側の不具合であるように見えます。

3
Stephane Nicoll

破損したjarファイルを置き換えることで解決しました。

しかし、これらの破損したjarファイルを見つけるには、3つのIDEでアプリケーションを実行する必要があります。1)Intellij Idea 2)NetBeans 3)Eclipse。

Netbeansは、破損したjarの最大数に関する情報を提供してくれました。実行に伴うNetbeansでは、(プロジェクトを右クリックしてから)ビルドオプションを使用して、破損したjarファイルの詳細を確認します。

これらのエラーの根本原因を見つけるのに15時間以上かかりました。それが誰にも役立つことを願っています。

3
Tarun

SpringConfig.JavaファイルでサービスのBeanを作成することで、この問題を解決しました。以下のコードを確認してください、

@Configuration 
public class SpringConfig { 

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

}

このファイルのパスは、下の画像に示されています Spring boot application folder structure

3

更新する必要があります

scanBasePackages = { "com.exm.Java" }

サービスにパスを追加するには(@serviceで注釈を付けた後)

1
yahya Harrathi

構成で「moviecruser.repository.MovieRepository」タイプのBeanを定義することを検討してください。

正しい依存関係を追加しなかった場合、このタイプの問題が発生します。私が直面したのと同じ問題ですが、JPA依存関係が正しく機能していないことがわかったので、最初の依存関係が正しいかどうかを確認してください。

例えば:-

私が使用した依存関係:

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

説明(この例外を見つけた):-

Moviecruser.serviceImple.MovieServiceImplのコンストラクターのパラメーター0には、見つからない 'moviecruser.repository.MovieRepository'タイプのBeanが必要でした。

アクション:

変更後の依存関係:-

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

応答:-

2019-09-06 23:08:23.202 INFO 7780-
[main] moviecruser.MovieCruserApplication]:10.585秒でMovieCruserApplicationを開始しました(11.357で実行されているJVM)

0
Arun Tiwari

Pom.xmlまたはgradleファイルに依存関係が追加されていることを確認してください

spring-boot-starter-data-jpa

0
Kumar Kathir