Spring:设置用@Resource注释的属性

时间:2013-07-25 20:16:48

标签: spring spring-annotations

使用Spring 3.2.1.RELEASE,groovy 1.8.8,以下表现不像我预期的那样。我已经省略了很多代码。如果这还不够,我会把一个(不)工作的完整例子放在一起。

groovy bean:

package foo

import javax.annotation.Resource

class SomeBean {
    @Resource
    String someProp
}

spring 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的错误而失败。为了解决这个问题,我最终做到了这一点:

groovy bean:

@Resource( name = 'someProp' )
String someProp

spring xml:

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

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

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

1 个答案:

答案 0 :(得分: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