2011-01-26 29 views
6

cố gắng để tích hợp chế độ ngủ đông và mùa xuân, tôi chạy vào lỗi nàymùa xuân BeanCreationException nhầm lẫn về bản đồ

NGHIÊM TRỌNG: Bối cảnh khởi thất bại org.springframework.beans.factory.BeanCreationException: Lỗi tạo đậu với tên 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping': Khởi tạo đậu thất bại; ngoại lệ lồng nhau là java.lang.IllegalStateException: Không thể ánh xạ trình xử lý 'org.me.spring.hib.school.web.SchoolController#0' tới đường dẫn URL [/allschools]: Đã có trình xử lý loại [class org.me.spring.hib.school.web.SchoolController] được ánh xạ.

My điều khiển trông giống như

package org.me.spring.hib.school.web; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.me.spring.hib.school.dao.SchoolDAO; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class SchoolController { 
    private SchoolDAO schoolDao; 

    public SchoolDAO getSchoolDao() { 
     return schoolDao; 
    } 

    public void setSchoolDao(SchoolDAO schoolDao) { 
     this.schoolDao = schoolDao; 
    } 
     @RequestMapping("/allschools") 
    public ModelAndView showAllSchools(HttpServletRequest request,HttpServletResponse response) throws Exception{ 
     if(this.schoolDao ==null){ 
      System.out.println("this.schoolDao is null"); 
     } 
     ModelMap modelMap = new ModelMap(); 
     modelMap.addAttribute("schoolsList", this.schoolDao.getAllSchools()); 
     return new ModelAndView("allschools", modelMap); 
    } 

} 

Tôi đã tiêm thi dao trong ứng dụng tập tin bối cảnh

<context:component-scan base-package="org.me.spring.hib.school.web" /> 

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
     <property name="sessionFactory" > 
      <ref bean="sessionFactory" /> 
     </property>  
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource"> 
      <ref local="dataSource"/> 
     </property> 
     <property name="annotatedClasses"> 
      <list> 
       <value>org.me.spring.hib.school.domain.School</value> 
       <value>org.me.spring.hib.school.domain.Teacher</value> 
       <value>org.me.spring.hib.school.domain.Student</value> 
      </list> 
     </property> 


     <property name="hibernateProperties"> 
     <props> 
       <prop key="hibernate.dialect"> org.hibernate.dialect.HSQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">create</prop> 
     </props> 
     </property> 

    </bean> 

    <bean id="schoolDao" class="org.me.spring.hib.school.dao.SchoolDAOImpl"> 
     <property name="hibernateTemplate" ref="hibernateTemplate" /> 
    </bean> 


    <bean class="org.me.spring.hib.school.web.SchoolController" > 
      <property name="schoolDao" ref="schoolDao" /> 
    </bean> 

Tôi không thể làm ra lý do tại sao SchoolController#0 đang được ánh xạ tới các url.

Trả lời

22

này đang xảy ra bởi vì bạn có cả

<context:component-scan base-package="org.me.spring.hib.school.web" /> 

<bean class="org.me.spring.hib.school.web.SchoolController" > 

Dòng đầu tiên sẽ tự động phát hiện và đăng ký một SchoolController cho bạn. Bằng cách khai báo một cách rõ ràng một cái khác, bạn sẽ nhận được một bản sao và ánh xạ url sẽ xung đột.

Bạn cần xóa <context:component-scan> hoặc xóa định nghĩa bean rõ ràng cho bộ điều khiển và DAO. Nếu bạn làm điều sau, thì bạn sẽ cần phải sử dụng autowiring để tiêm phụ thuộc của họ.

+0

nhờ skaffman .. – markjason72

0

Tôi gặp phải vấn đề tương tự. Tôi đã xác định lớp bộ điều khiển với "@Controller" và cũng trong tệp Spring-config.xml làm bean và đã tiêm các phụ thuộc.

Điều này đã gây ra sự cố. @Controller đang định nghĩa bean và một lần nữa, bean được định nghĩa trong tệp xml đang xác định lại các phụ thuộc. Tôi đã thử autowiring sự phụ thuộc và loại bỏ nó như là một bean từ file xml. Sau đó, nó hoạt động.

0

Hoặc bạn có thể đề cập đến <mvc:annotation-driven/> trong XML của bạn và loại bỏ các phần

<context:component-scan base-package="org.me.spring.hib.school.web" />.

Nếu bạn cảm thấy thoải mái với các ký pháp XML.

Các vấn đề liên quan