1

使用 Spring 3.2.1.RELEASE,groovy 1.8.8,以下行为不像我预期的那样。我已经省略了很多代码。如果这还不够,我将整理一个(不)工作的完整示例。

时髦的豆子:

package foo

import javax.annotation.Resource

class SomeBean {
    @Resource
    String someProp
}

春天的xml:

<context:annotation-config />

<context:component-scan base-package="other.packages.not.foo" />

<bean id="someBean" class="foo.SomeBean">
    <property name="someProp" value="bar" />
</bean>

这将失败,并出现关于无法找到满足 String 属性的 bean 的错误。为了解决这个问题,我最终这样做了:

时髦的豆子:

@Resource( name = 'someProp' )
String someProp

春天的xml:

<bean id="someProp" class="java.lang.String">
    <constructor-arg value="bar" />
</bean>

<bean id="someBean" class="foo.SomeBean" />

我不喜欢这个解决方案,因为它将 bean 源代码耦合到 spring 配置,这是错误的耦合方向。它为一个简单的字符串创建了一个不必要的 bean。我错过了一个明显的解决方案吗?

4

1 回答 1

0

@Resource 不适用于属性注入。

为此:

<bean id="someBean" class="foo.SomeBean">
  <property name="someProp" value="bar" />
</bean>

你需要实现一个setter方法

public void setSomeBean(String value) {
  someValue = value;
}

如果你想从你的上下文中注入一个不同的bean,可以使用@Resource。

@Resource(name="someBean")
SomeBean someBean
于 2013-07-25T20:20:00.200 回答