2014-06-28 44 views
3

我使用Hibernate 4 + Spring MVC 4,當我開始Apache Tomcat Server 8我得到這個錯誤:無法自動裝配領域

Error creating bean with name 'welcome': Injection of autowired dependencies failed; 
Could not autowire field: private dao.IRegion controller.welcome.regionI; 
No qualifying bean of type [dao.IRegion] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 

這裏是我的Hibernate配置包含<property name="packagesToScan" value="dao" />

<?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" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

    <context:property-placeholder location="persistence-mysql.properties" /> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="dao" /> 
     <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
     </props> 
     </property> 
    </bean> 

<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> --> 
    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"> 
     <property name="driverClassName" value="${jdbc.driverClassName}" /> 
     <property name="url" value="${jdbc.url}" /> 
     <property name="username" value="${jdbc.user}" /> 
     <property name="password" value="${jdbc.pass}" /> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

    <bean id="persistenceExceptionTranslationPostProcessor" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

</beans> 

是我把我的道和接口的包。

我區接口dao.IRegion

public interface IRegion<T extends Serializable> { 

    List<T> findAll(); 

} 

我區DAO dao.RegionDAO

@Repository 
public class RegionDAO implements IRegion <Region> { 

    @Autowired 
    private SessionFactory sessionFactory; 

    @Override 
    public List<Region> findAll() { 

     return sessionFactory.getCurrentSession().createQuery("from Region").list(); 
    } 

} 

我的控制器

@Controller 
public class welcome { 

    @Autowired 
    private IRegion<Region> regionI; 
     .... 

} 

我的servlet調度

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/mvc 
          http://www.springframework.org/schema/mvc/spring-mvc.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context.xsd"> 
    <mvc:default-servlet-handler /> 
    <context:component-scan base-package="controller"/> 
    <mvc:annotation-driven /> 

    <mvc:resources mapping="/resources/**" location="/resources/" /> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/pages/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 


</beans> 
+0

你能分享你的彈簧配置嗎? –

+0

我更新我的問題,我添加它 – Youssef

+0

'regionI'的bean條目在哪裏? – Amogh

回答

4

一個類型爲RegionDao的bean永遠不會被Spring IOC容器創建,因此這個bean不是由Spring管理的,這使得它不可用於自動裝配。 Spring基本上是說,我沒有任何bean在控制器中滿足這種依賴關係。

爲了讓RegionDao由Spring創建和管理,組件在hibernate配置文件中掃描類的包。

<context:component-scan base-package="package.with.daos"/> 

這將創建Spring IoC容器內RegionDao類型的bean並使其可用於自動裝配。

+0

是的,它在它看起來'' – Youssef

+3

該配置是爲hibernate,它的包掃描您的實體。請參閱:http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/orm/hibernate4/LocalSessionFactoryBean.html#setPackagesToScan%28java.lang.String...%29該屬性不會導致你的dao在Spring IOC Container中註冊爲bean。 –

+0

@KevinBowersox你的意思是說在servlet的XML? – Amogh