我正在从事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实例的唯一组件。我想您也已打开组件扫描。