这个是一个spring的笔试题,公司给了一个错误的程序,让修正它。
请大家帮我看看,我基本调通了,但是有的地方不确定,希望大家把自己的贴上来,让我参考一下。谢谢,好的我会加分的。applicationContext.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <bean id="courseService" class="CourseService">
<property name="dao" ref="talentDao" />
</bean>
  
   <bean id="courseDao" class="CourseDAOImpl">
</bean>

</beans>CourseDAO.java
import java.util.ArrayList;
import java.util.List;public interface CourseDAO {

public List AllCourses();
 public  List AllCoursesOrdered();                 
}
AbstractCourseDAOImpl.javaimport java.util.List;
public class AbstractCourseDAOImpl implements CourseDAO { protected static final String[] courses = { "Java", "C++", "C", "PHP" };

private final List results = null; public List AllCourses() 

{
return this.results;
}

 public List AllCoursesOrdered()   {
return this.results;
}

}CourseDAOImpl.java
import java.util.ArrayList;
import java.util.List;public class CourseDAOImpl extends AbstractCourseDAOImpl { private List results = null;

public List AllCourses() {
return check();
}

private List check() {
List l = new ArrayList();
for (int i = 1; i < super.courses.length; i++) {
l.add(super.courses[i].toUpperCase());
}
return results;
}
}
CourseService.java
import java.util.ArrayList;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;public class CourseService { @Autowired
@Qualifier("courseDao")
private CourseDAO dao; public ArrayList AllCourses() {
ArrayList list = new ArrayList();
dao.AllCourses(); return list;
} public List<String> AllCoursesOrdered() {
return dao.AllCoursesOrdered();
} // Setter injection -- just in case you'd need it.
public void setDao(CourseDAO dao) {
this.dao = dao;
}
}
CourseTest.java
import java.util.List;import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.infohubble.TalentService;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext.xml")
public class CourseTest {

@Autowired
@Qualifier("courseService")
private CourseService courseService;

@Test
public void CountTheSkillsYouNeed() {
Assert.assertTrue(courseService.AllCourses(),
4);
}


   @Test
public void CheckSkillsOrdered() {
String firstSkill = "Eclipse";
List skills = courseService.AllCoursesOrdered();
Assert.assertEquals("The course "+firstSkill+" should be first",true,courses.get(0).equalsIgnoreCase(firstSkill));
}      
}

解决方案 »

  1.   

     <property name="dao" ref="talentDao" />
    talentDao的bean呢?怎么找不到?
      

  2.   

    不好意思,这个应该改为 <property name="dao" ref="courseDao" />
    还有别的吗?
      

  3.   

    <property name="dao" ref="talentDao" />
    在那里配置的?
    courseDao生成了之后给谁用的?
     <bean id="courseService" class="CourseService">
            <property name="dao" ref="talentDao" />
        </bean>这个dao注入错误的dao
    --------
    可能还有空指针的问题...
      

  4.   

    这里,总是会返回长度为0的List
      

  5.   

    private final List results = null;
    楼上发现问题了~有这句不是null才怪那~
      

  6.   

    原始数据中根本没有“Eclipse”这一项。(第4个错)排序算法没实现(第5个错)
    好了,至少有这5个错,逐一改正吧
      

  7.   

    关键字final有“这是无法改变的”或者“终态的”含义
    final成员变量表示常量,只能被赋值一次,赋值后值不再改变~
      

  8.   


     <bean id="courseDao" class="CourseDAOImpl">
        </bean>
      

  9.   

    import java.util.ArrayList;
    import java.util.List;public class CourseDAOImpl extends AbstractCourseDAOImpl {    private List results = null;
        
        public List AllCourses() {
            return check();
        }
        
        private List check() {
            List l = new ArrayList();
            for (int i = 1; i < super.courses.length; i++) {
                l.add(super.courses[i].toUpperCase());
            }
            return results;
        }
    }  return results;  改成   return l;