2017-11-27 13 views
0

なし予選豆、私は春のセキュリティと持続性(JPA)とアプリのMVCを構築しようとしていると私はこのエラーを取得しています:春+データ-JPA org.springframework.beans.factory.NoSuchBeanDefinitionException:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'recipeDao': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.Class<org.springframework.data.repository.Repository<?, ?>>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) 
    ... 72 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.Class<org.springframework.data.repository.Repository<?, ?>>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
    ... 85 more 

問題は、エンティティマネージャファクトリが必要なプロキシBeanを作成できないようです。これは私のXMLコンテキストparamです:

<?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:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:sec="http://www.springframework.org/schema/security" 
     xmlns:rep="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/context http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> 
<context:component-scan base-package="com.jlab.recipesspringmvc"/> 
<rep:repositories base-package="com.jlab.recipesspringmvc.dao"/> 
<mvc:annotation-driven /> 
<tx:annotation-driven/> 
<!-- MVC --> 
<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/views/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 
<bean id="validator" class="com.jlab.recipesspringmvc.utils.RecipeValidator"/> 

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="validation"/> 
</bean> 
<!-- Hibernate --> 
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor "/> 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3306/recipesspringmvc" /> 
    <property name="username" value="root" /> 
    <property name="password" value="password" /> 
</bean> 
<bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">   
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.jlab.recipesspringmvc.bean" /> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <!-- fix per il problema del lazy-init sulle collections --> 
      <prop key="hibernate.enable_lazy_load_no_trans">true</prop> 
     </props> 
    </property> 
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/> 
</bean> 
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 
<!--Security --> 
<!-- Abilitiamo le annotazioni di security per il Service Layer: deve trovarsi nel file del component-scan --> 
<sec:global-method-security pre-post-annotations="enabled" secured-annotations="enabled"/> 
<sec:http auto-config="true" use-expressions="true"> 
    <sec:intercept-url pattern="/create" access="hasAnyRole('USER','ADMIN')"/> 
    <sec:intercept-url pattern="/delete" access="hasAnyRole('USER','ADMIN')"/> 
    <sec:intercept-url pattern="/update" access="hasAnyRole('USER','ADMIN')"/> 
    <sec:intercept-url pattern='/review' access="hasRole('ADMIN')"/> 
    <sec:form-login 
     login-page="/index" 
     login-processing-url="/indexLogin" 
     default-target-url="/index" 
     authentication-failure-url="/index?error=true" 
     username-parameter="username" 
     password-parameter="password"/> 
    <sec:logout logout-success-url="/" /> 
    <sec:access-denied-handler error-page="/403" /> 
</sec:http> 

<sec:authentication-manager> 
    <sec:authentication-provider ref="authenticationProvider"/> 
</sec:authentication-manager> 

<bean id="authenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"> 
    <property name="userDetailsService" ref="userDetailsService"/> 
    <property name="passwordEncoder" ref="passwordEncoder"/> 
</bean> 

<bean id="userDetailsService" class="com.jlab.recipesspringmvc.utils.LoginCast" /> 

<bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"> 
    <constructor-arg value="256"/> 
</bean>  
</beans> 

ダオはCrudRepository

@Repository 
public interface RecipeDao extends CrudRepository<Recipe, Long> { 

    public List<Recipe> findByName(String name); 
    public Recipe findById(Long id); 
    public List<Recipe> findByUser(User user); 

} 

と少なくとも最後のではなく、私を拡張incriminatedダオ

を@Autowireする
@Service 
@Transactional 
public class CreateImpl implements Create{ 
    @Autowired 
    private RecipeDao recipeDao; 
    @Autowired 
    private CategoryDao categoryDao; 
    @Autowired 
    private ReportedRecipeDao repDao; 
    @Autowired 
    private UserDao userDao; 
    @Autowired 
    private RoleDao roleDao; 
//implementation 
} 

をしようとするクラスPom

<properties> 
 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
 
     <java.version>1.8</java.version> 
 
     <hibernate.version>4.0.1.Final</hibernate.version> 
 
     <spring.version>4.3.12.RELEASE</spring.version> 
 
     <spring.sec.version>4.2.3.RELEASE</spring.sec.version> 
 
     <spring.data.version>1.11.4.RELEASE</spring.data.version> 
 
     <!-- <tomcat.version>8.0.3</tomcat.version> --> 
 
     <maven.compiler.source>1.8</maven.compiler.source> 
 
     <maven.compiler.target>1.8</maven.compiler.target> 
 
    </properties> 
 
    <dependencies> 
 
     <dependency> 
 
      <groupId>org.springframework</groupId> 
 
      <artifactId>spring-context</artifactId> 
 
      <version>${spring.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.springframework</groupId> 
 
      <artifactId>spring-orm</artifactId> 
 
      <version>${spring.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.springframework.security</groupId> 
 
      <artifactId>spring-security-core</artifactId> 
 
      <version>${spring.sec.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.springframework.security</groupId> 
 
      <artifactId>spring-security-config</artifactId> 
 
      <version>${spring.sec.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.springframework.security</groupId> 
 
      <artifactId>spring-security-web</artifactId> 
 
      <version>${spring.sec.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.springframework.security</groupId> 
 
      <artifactId>spring-security-taglibs</artifactId> 
 
      <version>${spring.sec.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.springframework.data</groupId> 
 
      <artifactId>spring-data-commons</artifactId> 
 
      <version>${spring.data.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.springframework.data</groupId> 
 
      <artifactId>spring-data-jpa</artifactId> 
 
      <version>${spring.data.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.springframework</groupId> 
 
      <artifactId>spring-web</artifactId> 
 
      <version>${spring.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.springframework</groupId> 
 
      <artifactId>spring-webmvc</artifactId> 
 
      <version>${spring.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>javax</groupId> 
 
      <artifactId>javaee-web-api</artifactId> 
 
      <version>7.0</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>mysql</groupId> 
 
      <artifactId>mysql-connector-java</artifactId> 
 
      <version>5.1.6</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>jstl</groupId> 
 
      <artifactId>jstl</artifactId> 
 
      <version>1.2</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.hibernate</groupId> 
 
      <artifactId>hibernate-entitymanager</artifactId> 
 
      <version>${hibernate.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.hibernate</groupId> 
 
      <artifactId>hibernate-core</artifactId> 
 
      <version>${hibernate.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.hibernate.common</groupId> 
 
      <artifactId>hibernate-commons-annotations</artifactId> 
 
      <version>${hibernate.version}</version> 
 
     </dependency> 
 
     <dependency> 
 
      <groupId>org.hibernate</groupId> 
 
      <artifactId>hibernate-validator</artifactId> 
 
      <version>6.0.5.Final</version> 
 
     </dependency> 
 
    </dependencies>

3日前と同じように、私の問題に対する回答を検索しようとしました。私を助けてください、皆さんは私の最後の手段です、ごめんなさい。私は自分自身に答えなければなら

+0

「recipeDao」他の人が同じ出力をスローすると –

+0

applicationContext.xmlでrecipeDaoを宣言できますか? –

+0

@PrashantSaraswat、確かに、それはインターフェイスだし、 "本当の"実装はなく、バネデータjpaはそのためのプロキシ実装を作成する必要があります。私は試しましたが、結果は(期待どおり) {原因:org.springframework.beans.BeanInstantiationException:[com.jlab.recipesspringmvc.dao.RecipeDao]のインスタンス化に失敗しました:指定されたクラスがインタフェース} – Asgardian

答えて

0

は、私が

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-commons</artifactId> 
     <version>${spring.data.version}</version> 
    </dependency> 

依存関係を削除、それを解決しました。おそらくバージョン管理や競合に問題がありました。