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

spring自动连线vs资源

祁烈
2023-03-14

那么我的问题是,@javax为什么会这样做。注释。资源工作,但@AutoWired没有工作。为了在Restful控制器上进行测试,我尝试将MappingJackson2HttpMessageConverter注入@Autowired,在启动时,容器未能找到符合条件的bean,即使该类位于路径上。现在,为了解决这个问题,我进入了一个上下文xml文件并添加了bean:

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>

然后在测试类中有成员变量:

@javax.annotation.Resource(name="jsonConverter")
private  MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;

然后Spring找到了豆子。Autowire是否仅适用于通过包扫描标识为bean的bean?

提前谢谢你。

共有3个答案

卜弘文
2023-03-14

这是来自Spring引用。第二段可能提供指针。

如果您打算通过名称来表示注释驱动的注入,请不要主要使用@Autowired,即使从技术上讲它能够通过@Qualifier值引用bean名称。相反,使用JSR-250@Resource注释,该注释在语义上定义为通过其唯一名称标识特定的目标组件声明的类型与匹配过程无关。

作为这种语义差异的一个特定结果,本身定义为集合或映射类型的bean不能通过@Autow的注入,因为类型匹配不适用于它们。对此类bean使用@Resources,通过唯一名称引用特定集合或映射bean。

@Autowoe适用于字段、构造函数和多参数方法,允许在参数级别通过限定符注释缩小范围。相比之下,@Resources仅支持具有单个参数的字段和bean属性设置器方法。因此,如果您的注入目标是构造函数或多参数方法,请坚持使用限定符。

我认为,在您的情况下,默认自动布线的名称可能存在一些问题。因此,如果您提到限定符,我想Spring将能够自动连接bean。但是,如果这是资源的情况,我想我更喜欢使用它。

王棋
2023-03-14

在这两种情况下,只有在将连接的bean定义到Spring上下文中时,Spring才会连接依赖项。您必须在xml文件中定义bean,或者使用基于注释的bean定义使其符合连接条件。

另一方面,@Resource执行基于名称的连接,而@Autowire默认使用基于类型的连接。

有关主题的更多上下文,请参阅@Resource vs@Autowired。

师承弼
2023-03-14

<代码>自动连线和<代码>资源仅使带注释字段、方法或构造函数的类类型符合依赖注入的条件-它不会自动将这些类型添加到Spring应用程序的上下文中!

因此,正如您所怀疑的,为了使注释工作,您必须确保自动连接类型在应用程序上下文中可用,例如使用Component注释和包扫描,或者像您在示例中所做的那样,在application-context.xml中显式定义bean。

 类似资料:
  • 我有个小问题。如果类是用@component、@service、@controller或@repository注释的,并且我想注入它的依赖项,我需要@autowired吗? 这段代码对我来说非常适用,因为它是UserDeviceService中指定的@Service注释。是因为那个吗?

  • 我有一个带有自动扫描和@Component注释的Spring项目。一些组件需要使用@Autow的注入到不同的bean中。默认情况下,它是否将是作为单例创建的相同组件bean?如果是,如何将同一组件的不同实例注入不同的bean中? 附言:我知道它接近基础,听起来很一般。只是想自己说清楚。 提前致谢

  • 我定义了一个简单的类来保存我的elasticsearch客户端(称为ElasticClientConfig.java)的配置属性。 我为我的开发、生产和测试环境定义了一个配置。每个配置概要文件都有一个方法,该方法返回ElasticClientConfig类型的bean,并使用特定于环境的参数构建一个MyConfig对象。以下是开发版本: 我在我的网站中将我的活动配置文件设置为“dev”。xml文件

  • 我对从类扩展的Spring bean初始化有一个问题。我完全卡住了。 类hiearchy如下所示: 提到该类对需要初始化的服务很有用: 创建bean时: 则中的为null-似乎没有自动连线。 它能否与是从抽象类扩展而来的这一事实相联系? 这个bean可能从未初始化过... 这是个例外: org.springframework.beans.factory.UnsatisfiedDependencyE

  • 问题内容: 我在Spring定义了这样的地图: 然后,我将该bean自动装配为定义为的属性: 这样做时,会抛出一个异常,说: `Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘DutyCreator’: Injection of autowired

  • 我正在努力学习一本书名为《SpringMVC初学者指南》的书,我一直在努力创建存储库对象。我不断地得到一个BeanCreationException。不知道我还错过了什么。我想知道是否有人能帮我解决这个问题。 请在下面找到我的代码。谢谢 BeanCreationException XML文件: ProductCrontroller: 产品存储库: InMemoryProductRepository