2016-03-23 9 views
6

私は私のSpringbootアプリケーションのfollowing code structureを持っている:Springboot CrudRepositoryオートワイヤリングエラー

structure

私は豆UserDaoためNoSuchBeanDefinitionExceptionの例外を取得しています。

例外トレース:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.matlb.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotat`enter code here`ion.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) ~[spring-beans-4.2.5.RELEASE.jar:4.2.5.RELEASE] 
    ... 37 common frames omitted 

UserDao.javaインタフェースのソースコードが

package com.matlb.dao; 

import com.matlb.domain.User; 
import org.springframework.data.repository.CrudRepository; 
import org.springframework.stereotype.Repository; 

@Repository 
public interface UserDao extends CrudRepository<User,Integer>{ 

    User findByEmail(String email); 
} 

であると私はメインクラスの

package com.matlb.service; 

import com.matlb.dao.UserDao; 
import com.matlb.domain.User; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

import java.util.List; 

@Service 
public class UserServiceImpl implements UserService { 

    @Autowired 
    private UserDao userDao; 

    @Override 
    public List<User> findAll() { 
     return (List<User>) getUserDao().findAll(); 
    } 

    @Override 
    public User createUser(String email) { 
     User user = new User(email); 
     return saveUser(user); 
    } 

    @Override 
    public User findById(Integer userId) { 
     return getUserDao().findOne(userId); 
    } 

    @Override 
    public User saveUser(User user) { 
     return getUserDao().save(user); 
    } 

    @Override 
    public User findByEmail(String email) { 
     return getUserDao().findByEmail(email); 
    } 

    @Override 
    public void delete(Integer userId) { 
     getUserDao().delete(userId); 
    } 

    public UserDao getUserDao() { 
     return userDao; 
    } 
} 

ソース

ここでそれをオートワイヤリングしています
package com.matlb; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 

@SpringBootApplication 
public class MatlbApplication { 

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

build.gradle

buildscript { 
    ext { 
     springBootVersion = '1.3.3.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
     classpath("org.springframework:springloaded:1.2.1.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 

jar { 
    baseName = 'demo' 
    version = '0.0.1-SNAPSHOT' 
} 
sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 


dependencies { 
    compile('org.springframework.boot:spring-boot-starter-aop') 
    compile('org.springframework.boot:spring-boot-starter-web') 
    compile("org.springframework.boot:spring-boot-devtools") 
    compile("org.springframework.boot:spring-boot-starter-data-jpa") 
    runtime('mysql:mysql-connector-java') 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
    testCompile('org.springframework.restdocs:spring-restdocs-mockmvc') 
} 

idea { 
    module { 
     inheritOutputDirs = false 
     outputDir = file("$buildDir/classes/main/") 
    } 
} 

eclipse { 
    classpath { 
     containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER') 
     containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8' 
    } 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.9' 
} 

私はそれが間違ってやっているところ私に知らせてください。私は@Repository注釈を使用すると、IntellijをIDEとして表示し、Beanを表示しています。

+2

あなた 'UserDao'は単なる' CrudRepository'ある - ない 'JpaRepository'、' MongoRepository'、または特定のバックエンドが使用するために春を告げる他のタイプ。 – chrylis

+0

例外が発生していますか? – Prashant

+0

これはスタートです。 '@ EnableFooRepositories'アノテーションが必要な場合もあります。 – chrylis

答えて

8

まず、DAOインターフェイスから@Repositoryを削除する必要があります。 Spring Data JPAは@Repositoryなしで実装をビルドし、Springコンテナに展開します。 String Data Jpaに命令を与えるのは@EnableJpaRepositoryです。スプリングブートの自動設定では、あなたのために@ EnableJpaRepositoryが宣言されます。

次に、CrudRepositoryをJpaRepositoryに置き換えます。

最後に、spring-boot-starter-data-jpaをmaven依存関係として宣言していることを確認してください。

よろしく、 ダニエル

+0

何とか私はJpaRepositoryをインポートできません。 \tコンパイル(「org.springframework.boot:春・ブート・スターター・ウェブ」) \tコンパイル:私は 依存関係{ \tコンパイル(「春・ブート・スターター・AOP org.springframework.boot」)を使用しています(「mysql:mysql-connector-java」) 実行時( 'org.springframework.boot:spring-boot-devtools') 実行時( 'mysql:mysql-connector-java') \t testCompile( 'org.springframework.boot:スプリングブートスタータ試験') \t testCompile( 'org.springframework.restdocs:スプリングrestdocs-mockmvc') } BUIでld.gradle。 – Prashant

+0

確かに、質問を編集しています。 – Prashant

+0

あなたにはグラデルの問題があるようです。依存関係ツリーをチェックアウトし、spring-data-jpaがその一部であることを確認してください。 –

関連する問題