那么我的问题是,@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?
提前谢谢你。
这是来自Spring引用。第二段可能提供指针。
如果您打算通过名称来表示注释驱动的注入,请不要主要使用@Autowired,即使从技术上讲它能够通过@Qualifier值引用bean名称。相反,使用JSR-250@Resource注释,该注释在语义上定义为通过其唯一名称标识特定的目标组件,声明的类型与匹配过程无关。
作为这种语义差异的一个特定结果,本身定义为集合或映射类型的bean不能通过@Autow的注入,因为类型匹配不适用于它们。对此类bean使用@Resources,通过唯一名称引用特定集合或映射bean。
@Autowoe适用于字段、构造函数和多参数方法,允许在参数级别通过限定符注释缩小范围。相比之下,@Resources仅支持具有单个参数的字段和bean属性设置器方法。因此,如果您的注入目标是构造函数或多参数方法,请坚持使用限定符。
我认为,在您的情况下,默认自动布线的名称可能存在一些问题。因此,如果您提到限定符,我想Spring将能够自动连接bean。但是,如果这是资源的情况,我想我更喜欢使用它。
在这两种情况下,只有在将连接的bean定义到Spring上下文中时,Spring才会连接依赖项。您必须在xml文件中定义bean,或者使用基于注释的bean定义使其符合连接条件。
另一方面,@Resource执行基于名称的连接,而@Autowire默认使用基于类型的连接。
有关主题的更多上下文,请参阅@Resource vs@Autowired。
<代码>自动连线和<代码>资源仅使带注释字段、方法或构造函数的类类型符合依赖注入的条件-它不会自动将这些类型添加到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