我是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类吗?
谢谢
安德烈
Spring将自动扫描所有类,找到所有带注释的类并注册它们,Spring配置中会告诉它这样做:
<context:component-scan base-package="my.base.package" />
因此,您不需要在配置文件中声明您的@Repository
。
关于你问题的第一部分,这是国际奥委会模式的取消;您的服务类只知道DAO的接口,这意味着它不依赖于实现
在扫描过程中,Spring将找到所有带注释的类,当您请求自动连接时,它将尝试找到您已注释的类,该类是您请求自动连接的接口的实施者。
查看注释配置上的Spring留档。
你的两个问题的答案是是和是。
事实上,您可能没有在服务中自动安装ContactDAOImpl的实例,而是代理的实例,它删除到ContactDAOImpl的实例。代理通常会处理事务、翻译异常等。
存储库注释是声明Springbean的另一种(更简单)方法。只有当Spring xml文件中有一个元素告诉它发现带注释的bean时,它才起作用。
我的第一个疑问与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抛出异常