当前位置: 首页 > 知识库问答 >
问题:

关于在Spring框架中使用**@Autowired**注释和接口声明的一些疑问

常乐
2023-03-14

我是Spring框架的新手,我对@Autow的注释和接口声明的使用有一些问题。

参考此示例:

http://viralpatel.net/blogs/spring3-mvc-hibernate-maven-tutorial-eclipse-example/

我知道@Autow的注释可用于自动链接属性上的bean。

在上一个示例中,我遇到了以下情况:

我有一个ContactDAO接口,它的实现类名为ContactDAOImpl

接下来,在ContactServiceImpl类中,有一个使用@Autowired注释的变量:

@Autowired
private ContactDAO contactDAO;

我的第一个疑问与ContactDAO是一个接口这一事实有关,那么我要连接什么呢?具体类型:ContactDAOImpl?如果是,Spring框架是否可以做到这一点?

第二个疑问与这样一个事实有关,即在spring-servlet.xml配置文件中没有ContactDAO或ContactAOImpl类的bean定义...为什么?是因为使用@Repository注释注释了ContactDAOImpl类吗?

谢谢

安德烈

共有3个答案

仲孙俊贤
2023-03-14

Spring将自动扫描所有类,找到所有带注释的类并注册它们,Spring配置中会告诉它这样做:

<context:component-scan base-package="my.base.package" />

因此,您不需要在配置文件中声明您的@Repository

关于你问题的第一部分,这是国际奥委会模式的取消;您的服务类只知道DAO的接口,这意味着它不依赖于实现

在扫描过程中,Spring将找到所有带注释的类,当您请求自动连接时,它将尝试找到您已注释的类,该类是您请求自动连接的接口的实施者。

查看注释配置上的Spring留档。

宦博超
2023-03-14

你的两个问题的答案是是和是。

事实上,您可能没有在服务中自动安装ContactDAOImpl的实例,而是代理的实例,它删除到ContactDAOImpl的实例。代理通常会处理事务、翻译异常等。

存储库注释是声明Springbean的另一种(更简单)方法。只有当Spring xml文件中有一个元素告诉它发现带注释的bean时,它才起作用。

史钊
2023-03-14

我的第一个疑问与ContactDAO是一个接口这一事实有关,那么我要连接什么呢?具体类型:ContactDAOImpl?如果是,Spring框架是否可以做到这一点?

Spring将为您自动连接接口的实现,只要只有一个匹配的实现。还有一种方法可以将多个候选的单个实现与您的自动连接相匹配,方法是将限定符与自动连接一起使用,并命名实现。

第二个疑问与这样一个事实有关,即在spring-servlet.xml配置文件中没有ContactDAO或ContactAOImpl类的bean定义...为什么?是因为使用@Repository注释注释了ContactDAOImpl类吗?

如果在实现中使用注释(@组件@存储@服务@控制器)进行配置,则无需在xml中显式定义bean(尽管您也可以这样做)。

编辑:我的这个旧答案可能会为在Spring中使用注释提供更多的启示。

 类似资料:
  • 这是实现我的项目的CRUD操作的类的整个代码: 好的,正如您所看到的,使用@Transactional注释对一些方法进行了注释。 我正在阅读官方文档http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/transaction.html中关于该注释在方法上的使用,它看到了:使用@transac

  • 我正在研究如何在Spring框架中使用JDBC在数据库上执行查询。 我遵循这个教程:http://www.tutorialspoint.com/spring/spring_jdbc_example.htm 在本教程中,我定义了一个StudentDAO接口,它只定义我想要的CRUD方法。 然后定义了Student类,它是我希望在Student数据库表中持久化的实体。 然后,定义了作为RowMappe

  • 问题内容: 我在Spring领域还很陌生,我开发了一个简单的项目,该项目使用Spring 3.2.1和Hibernate 4.1.9来实现DAO。该项目可以正常工作,但是我对在此DAO的CRUD方法上使用 @Transactional Spring批注有一些疑问。 这是实现我的项目的CRUD操作的类的完整代码: 好的,正如您所看到的,使用@Transactional注释对某些方法进行了注释。 我在

  • 我知道@autowired用于依赖注入

  • 我正在学习Spring MVC Showcase项目,可从STS仪表板下载 我有以下情况,但我并不完全清楚: 我有以下表格: 与id="readForm"的表单的提交操作相关,我有以下Jquery函数,它简单地执行一个AJAX调用,将两个经过验证的文本变量隐藏在请求的主体字段中:**foo=bar和Fru=apple 我的控制器类处理此请求的方法如下: 好的,该方法将使用@ModelAttribu

  • 我试图构建我的第一个Spring MVC项目,我一直在阅读大量的教程,观看视频等...但我面临着这个问题: 说明服务器遇到一个内部错误,使其无法满足此请求。 例外 servletException:servlet的servlet.init()springDispatcherServlet抛出异常