我正在开发Spring和hibernate项目。对于数据库通信,我们有传统的两层实现(即DAO层和服务层)。我有以下文件:
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层
Follwing来自服务层:
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;
}
}
Follwing是我的控制者
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类一样工作的?
提前致谢。
答案 0 :(得分:1)
DemoManagerImpl被注释为服务,并且是唯一要在FromDualLayerView类中注入的限定bean,因为它是唯一的DemoManager实例组件。我想你也打开了组件扫描。
答案 1 :(得分:1)
@Repository注释和@Service注释意味着您要注释它们。它实际上是一个注释实现而不是接口的Spring最佳实践。
您的spring配置文件正在扫描类路径,因此会检测到这些bean。将弹簧记录转到TRACE,您可能会看到以下行的输出:
&#34;扫描类路径,找到目标DemoDaoImpl&#34;