【发布时间】:2018-01-02 13:00:13
【问题描述】:
我整天都在查看我的代码,但找不到原因。存储库 (@Repository) 工作得很好,我一直失败的是 @Service 字段让它自动装配,我一直在努力,因为一切看起来都很好
分派的servlet:
<mvc:annotation-driven />
<context:component-scan base-package="com" />
com.repository
Repo.java
package com.repository;
import com.domain.Student;
import java.util.List;
public interface Repo { public List<Student> getAllSiswa(); }
RepoImplement.java
import com.domain.Student;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Repository;
@Repository
public class RepoImplement implements Repo {
List<Student> ls = new ArrayList<>();
public RepoImplement(){
Student s1 = new Student();
s1.setNama("paul");
Student s2 = new Student();
s2.setNama("robert");
ls.add(s1);
ls.add(s2);
}
@Override
public List<Student> getAllSiswa() {
return this.ls;
}
}
打包 com.service;
Serve.java
import com.domain.Student;
import java.util.List;
public interface Serve {
void changeName(String namaBaru);
public List<Student> newList();
}
我怀疑这里有问题
ServeImplement.java
import com.domain.Student;
import com.repository.Repo;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ServeImplement implements Serve {
@Autowired
public Repo repo;
List<Student> s = repo.getAllSiswa(); // THIS IS SUSPECTING ME.
@Override
public void changeName(String namaBaru) {
s.get(0).setNama(namaBaru); // get first Student, then update its name.
}
@Override
public List<Student> newList() {
return this.s;
}
}
controller2.java(是服务学生的映射请求)
package com.controlller;
import com.domain.Student;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.service.Serve;
@Controller
public class controller2 {
@Autowired
public Serve serv;
@RequestMapping("/changename")
public ModelAndView sdaf() {
serv.changeName("New name");
List<Student> list = serv.newList();
return new ModelAndView("page2", "out", list);
}
}
错误:
创建名为“controller2”的 bean 时出错:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:公共 com.service.Serve com.controller.controller2.serv;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建文件中定义的名称为“serveImplement”的bean [C:\Users\hans\Documents\NetBeansProjects\WebApplication2\build\web\WEB-INF\classes\com\service\ServeImplement.class]: bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:不能 实例化 bean 类 [com.service.ServeImplement]:构造函数抛出 例外;嵌套异常是 java.lang.NullPointerException
【问题讨论】:
-
是的。
repo可以是null。您在堆栈跟踪中看到 NPE 吗? -
@VinodMadyalkar,感谢您的回复,是的,
List<Student> s = repo.getAllSiswa();上的指针为空,但我找不到原因,因为它看起来连接正确.. -
将
repo.getAllSiswa();放入标记为@PostConstruct的方法中 -
@VinodMadyalkar,在
RepoImplement之后的@Override?? -
没有。在
ServeImplement:)
标签: java spring spring-mvc