类对象内部接口的@Autowired为空

时间:2018-07-07 00:15:58

标签: java model-view-controller interface autowired

我正在为我的项目使用MVC设计模式,我有一个名为SchoolRepository的接口,并且有一个控制器类,在其中我声明了学校存储库接口,并且在调用模型类时也声明了学校存储库接口。我从控制器编写逻辑的模型类对象中,由于服务类中声明的学校接口为空,所以我得到了空指针异常

下面是我的控制器类

    @RestController 
    @RequestMapping("University")
    public class Controller{

        //interface declaration
        @Autowired
        SchoolRepository  schoolRepository;

        @GetMapping("student")
        public list getStudent(){

           Service s=new Service();
           List list=s.getStudents();
           return list;
        }
        .
        .
    }

下面是我的模型课

      public class Service(){

      @Autowired
      SchoolRepository schoolRepository;

      public List getStudents(){
      return schoolRepository.getAll();
      }

下面是存储库类

           @Repository
           public interface SchoolRepository extends JpaRepository<School, Long>{}

我在使用schoolRepository的Service类中得到一个空点异常,当我使用System.Out.Println检查s.schoolRepository的值时,我得到了空值..如何初始化接口以及如何在其中使用它服务等级

1 个答案:

答案 0 :(得分:0)

使用“ new”在Controller类的getStudent()方法中实例化服务类时,spring容器不会出现。由于服务对象不是由spring容器创建的,因此“ schoolRepository”将不会自动连接到“ Service”类中,因此它将为null。 因此,将Service类标记为@Service,以使spring容器负责实例化。然后,而不是使用“ new”创建Service对象,而是在Controller类中自动装配Service对象。确保您的存储库类也被标记为@Repository。