[解決済み] 自動配線された依存関係のインジェクションに失敗、フィールドを自動配線できなかった
質問
この質問は何度もされているので、2重(または3重、4重)の話題になる危険性がありますが、提案された解決策は私には効果がないようです。
cannot autowire エラーという恐ろしいエラーに悩まされています。初めて完全なSpringプロジェクトをゼロからセットアップしたので、問題が何であるかがよくわかりません。
これが私の現在の設定です。 ProjectRepoです。
package be.italent.repo;
import be.italent.model.Project;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ProjectRepo extends JpaRepository<Project, Integer> {
}
ProjectServiceです。
package be.italent.services;
import be.italent.model.Project;
import be.italent.repo.ProjectRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ProjectService {
@Autowired
private ProjectRepo projectRepo;
public List<Project> getAllProjects() {
return projectRepo.findAll();
}
}
ProjectRestControllerです。
package be.italent.controllers;
import java.util.ArrayList;
import be.italent.services.ProjectService;
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.RestController;
import be.italent.model.Project;
@RestController
@RequestMapping("/projects")
public class ProjectRestController {
@Autowired
private ProjectService projectService;
@RequestMapping(method = RequestMethod.GET, produces="application/json")
public ArrayList<Project> getProjects(){
ArrayList<Project> c = (ArrayList<Project>) projectService.getAllProjects();
return c;
}
}
spring-mvc.xml
...
<context:component-scan base-package="be.italent"></context:component-scan>
...
エラーです。
SEVERE: org.springframework.web.context.ContextLoaderListener クラスのリスナーインスタンスにコンテキスト初期化イベントを送信する例外が発生しました。 org.springframework.beans.factory.BeanCreationException: 名前 'projectRestController' を持つ Bean の作成に失敗しました。自動化された依存関係の注入に失敗しました。ネストされた例外は org.springframework.beans.factory.BeanCreationException.Injection of autowired dependencies です。ネストした例外は org.springframework.beans.factory.BeanCreationException: Could not autowire field: private be.italent.services.ProjectService be.italent.controllers.ProjectRestController.projectService; org.springframework.beans.factory.BeanCreationException.ProjectService は、ネストした例外が発生します。名前 'projectService' を持つ Bean の作成に失敗しました。ネストされた例外は org.springframework.beans.factory.BeanCreationException.Injection of autowired dependencies failed である。また、このような場合にも、「BeanCreationException」を使用します。この依存関係のための autowire 候補として修飾される少なくとも 1 つの bean が期待されます。依存関係のアノテーション。{を使用することで、[bealent.beans.factory.annotation.Autowired(required=true)}を使用することができます。 at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) で、以下のようになります。 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5068) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1572) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1562))です。 at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) 原因: org.springframework.beans.factory.BeanCreationException: 原因: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private be.italent.services.ProjectService be.italent.controllers.ProjectRestController.projectService; nested exception is org.springframework.beans.factory.BeanCreationException: 名前 'projectService' を持つ Bean の作成に失敗しました。ネストされた例外は org.springframework.beans.factory.BeanCreationException.Injection of autowired dependencies failed である。また、"Could not autowire field: private be.italent.repo.ProjectRepo be.italent.services.ProjectService.projectRepo; nested exception is org.springframework.beans.factory.NoSu" と表示されることもあります。
何かお手伝いできることはありますか?ありがとうございます。
解決方法
spring-mvc.xmlにこれを追加しました。
<beans
...
jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
...
<jpa:repositories base-package="be.italent.repo" entity-manager-factory-ref="emf"/>
解決方法は?
アプリケーションコンテキストの初期化時に何か問題が発生すると、Springはしばしばこのような長いスタックトレースを表示します。通常、スタックトレースの一番下を見れば、最終的な原因が何なのかが分かります。
あなたの場合、一番下にこのようなエラーメッセージが表示されていますね。
<ブロッククオートorg.springframework.beans.factory.NoSuchBeanDefinitionException.NoSuchBeanDefinitionException.NoSuchBeanDefinitionException: タイプ [be.italent.repo.ProjectRepo] の修飾された bean は見つかりませんでした。
これは、Springが以下のタイプのBeanを見つけることができないことを意味します。
ProjectRepo
.
あなたの
ProjectRepo
リポジトリインターフェースは、パッケージ
be.italent.repo
のサブパッケージである
be.italent
そのため、間違ったパッケージに入っていることが問題なのではありません。
Spring Data JPAを有効にするのを忘れていませんか?
XML 設定を使用する場合(今やっているように)には、その前に
repositories
XMLタグを設定ファイル内に記述します。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<!-- Tell Spring Data JPA where your repository interfaces are -->
<jpa:repositories base-package="be.italent.repo" />
<!-- ... -->
</beans>
JavaConfigを使用する場合は、アノテーションで行うことができます。
@Configuration
@EnableJpaRepositories("be.italent.repo")
public class MySpringConfiguration {
// ...
}
関連
-
[解決済み】Javaパッケージが存在しないエラー
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み】破損したjarファイル
-
[解決済み】Javaメソッドスタブ
-
[解決済み】koch snowflake java recursion
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み】文字列中の � を置換する方法
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。
-
[解決済み] "java.nio.charset.MalformedInputException" を避けるために、すべての包括的なCharset。入力の長さ= 1"?