自动装配界面工作而不注释它

时间:2014-07-09 14:31:26

标签: java spring hibernate dependency-injection annotations

我正在开发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类一样工作的?

提前致谢。

2 个答案:

答案 0 :(得分:1)

DemoManagerImpl被注释为服务,并且是唯一要在FromDualLayerView类中注入的限定bean,因为它是唯一的DemoManager实例组件。我想你也打开了组件扫描。

答案 1 :(得分:1)

@Repository注释和@Service注释意味着您要注释它们。它实际上是一个注释实现而不是接口的Spring最佳实践。

您的spring配置文件正在扫描类路径,因此会检测到这些bean。将弹簧记录转到TRACE,您可能会看到以下行的输出:

&#34;扫描类路径,找到目标DemoDaoImpl&#34;