我正在从事Spring和Hibernate项目。对于数据库通信,我们具有常规的两层实现(即DAO层和Service层)。我有以下文件:

DemoDao.java

package net.dao;
import java.util.List;
import net.domain.Demo;
public interface DemoDao
{
 public List<Demo> get();
}


DemoDaoImpl.java

package net.dao;

import java.util.List;

import net.domain.Demo;

import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class DemoDaoImpl implements DemoDao
{
    @Autowired
    SessionFactory sessionFactory;
    public List<Demo> get()
    {
        Session session=sessionFactory.openSession();
        List<Demo> list=session.createQuery("from Demo").list();
        session.close();
        return list;
    }
}


那是DAO层

关注来自服务层:

DemoManager.java

package net.service;

import java.util.List;

import net.domain.Demo;

public interface DemoManager
{
    public List<Demo> get();
}


DemoManagerImpl.java

package net.service;

import java.util.List;

import net.dao.DemoDao;
import net.domain.Demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DemoManagerImpl implements DemoManager
{
    @Autowired
    DemoDao demoDao;
    public List<Demo> get()
    {
        List<Demo> list=demoDao.get();
        return list;
    }
}


跟随是我的控制者

FromDualLayerView.java

package net.spring;

import java.util.List;

import net.domain.Demo;
import net.service.DemoManager;

import org.springframework.beans.factory.annotation.Autowired;
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 FromDualLayerView
{
    @Autowired
    DemoManager demoManager;

    @RequestMapping("/dualLayer")
    public ModelAndView toResult(ModelMap map)
    {
        List<Demo> list=demoManager.get();
        map.addAttribute("listData", list);
        return new ModelAndView("result");
    }
}


我的问题

实际上,一切正常,但是我在这里的问题是,我没有在DemoDao和DemoManager界面上进行注释,而是在自动装配它们。根据自动装配定义,将插入带注释的实体。

Spring容器如何注入依赖项?

以及它如何像Impl类一样工作?

提前致谢。

最佳答案

DemoManagerImpl被标注为服务,并且是唯一要注入到FromDualLayerView类中的合格Bean,因为它是DemoManager实例的唯一组件。我想您也已打开组件扫描。

08-28 01:53
查看更多