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

Spring MVC-@AutoWired是如何工作的?

祁俊喆
2023-03-14

我正在使用Java和Spring开发一个web应用程序。我是Spring的新手,所以作为一个学习的机会,我基本上得到了一个现有的应用程序,并被告知要扩展它。我很难理解@Autowired是如何工作的。我理解依赖注入的高级概念,但我想知道@AutoWired注释是如何知道要注入接口的哪个具体实现的?

为了使我的问题符合上下文,我将解释我所遇到的问题:

我有一个名为PostDao的接口,还有一个名为PostDaoImpl的类,它实现了PostDao。然后,我有另一个名为PostDaoPublicImpl的类,它扩展了PostDaoImpl。这些类存在于我的持久性层中。

然后,我有一个名为PostService的接口和一个名为PostServiceImpl的类来实现PostService。然后,我有另一个名为PostServicePublicImpl的类,它扩展了PostServiceImpl。这些类存在于我的服务层中。

在PostServiceImpl中,以下行注入以下对象:

@Autowired private PostDao postDao; 
//This injects an object of the class PostDaoImpl

我的问题是,在PostServicePublicImpl中,我如何拥有与上面相同的声明,但让它注入类PostDaoPublicImpl的一个对象:

@Autowired private PostDao postDao; 
//This injects an object of the class PostDaoPublicImpl

共有1个答案

毋弘光
2023-03-14

首先,您需要了解自动驾驶是如何工作的

然后,在bean定义中,定义autowire策略--让它成为我们案例的别名

<bean id="postDaoPublicImpl" class="com.yourpackage.PostDaoPublicImpl" autowire="byName" />

这意味着,如果任何类有一个名为“PostDaoPublicImpl”的属性,即上面bean的bean id,将自动注入到bean实例中

class PostServicePublicImpl  {

@Autowired private PostDaoPublicImpl postDaoPublicImpl; 
//here Spring will auto inject PostDaoPublicImpl implementation, since this property name matches the bean id and (auto wiring strategy is "byName")

}
 类似资料:
  • 问题内容: 我遇到了一个例子: 我很好奇如何获取集合,因为没有设置方法,而且它是私有的。 问题答案: Java允许上一个字段或方法的访问控制被关断(是的,有一个安全检查到第一通路)经由方法,其是反射框架(二者的一部分Field和从继承)。一旦发现并写入了该字段,其余的工作就变得很简单了。只是一个简单的编程问题。 分享

  • 应用程序具有上下文路径-->/spring-form-simple-project 因此,为了访问,我使用: 这个控制器又返回student.jsp,当提交这个student.jsp时,它用-->@RequestMapping(value=“/AddStudent”,method=RequestMethod.post)调用controller 任何关于这通常如何工作的指示都将是有帮助的。 谢谢!

  • 本文向大家介绍hibernate 是如何工作的?相关面试题,主要包含被问及hibernate 是如何工作的?时的应答技巧和注意事项,需要的朋友参考一下 读取并解析配置文件。 读取并解析映射文件,创建 SessionFactory。 打开 Session。 创建事务。 进行持久化操作。 提交事务。 关闭 Session。 关闭 SessionFactory。

  • 我很想知道谷歌应用商店服务中的Activity认可是如何工作的? 我认为活动是通过加速计数据识别的。是这样吗?。请告诉我详细情况如何

  • 我对GridBagLayout这一主题不熟悉,我无法理解约束、重量和填充之间的确切区别。 我可以而不分配。 除非您指定了至少一个非零值,否则所有组件都会聚集在其容器的中心。这是因为当权重为0.0(默认值)时,GridBagLayout会在其单元格网格和容器边缘之间放置任何额外的空间。 我的问题是,如果这是真的,那么为什么组件之间没有空间,它们看起来是连接的?

  • 从@mock和@injectmocks之间的差异,我理解@injectmocks被用作创建实例的注释,并将用@mock创建的mock注入其中。我想我不明白它是怎么工作的。 以下是我的问题: 在中,当我调用时,它返回一个空集...我的问题是:为什么不抛出(只声明mockedappoinceptions)?也许因为这是一个嘲弄?如果原因是这样,为什么模拟不抛出“NullPointerException