gpt4 book ai didi

java - Autowiring 接口(interface)无需注释即可工作

转载 作者:行者123 更新时间:2023-12-02 05:39:10 24 4
gpt4 key购买 nike

我正在从事 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 层

以下来自服务层:

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;
}
}

以下是我的 Controller

来自DualLayerView.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 接口(interface),但我正在 Autowiring 它们。根据 Autowiring 定义,被注释的实体被注入(inject)。

Spring容器如何注入(inject)依赖?

它如何像 Impl 类一样工作?

提前致谢。

最佳答案

DemoManagerImpl 被注释为服务,并且是注入(inject) FromDualLayerView 类中的唯一合格 bean,因为它是作为 DemoManager 实例的唯一组件。我想您也打开了组件扫描。

关于java - Autowiring 接口(interface)无需注释即可工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24656511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com