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



使用Spring 3.2.1.RELEASE,groovy 1.8.8,下面的操作与我预期的不一样。我删除了相当多的代码。如果这还不够,我将举一个(不)有效的完整例子。

groovyBean:

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。为了解决这个问题,我最终做了这样的事情:

groovyBean:

@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-config,这是错误的耦合方向。它为一个简单的String创建了一个不必要的bean。我是不是错过了一个显而易见的解决方案?

@资源不用于属性注入。

为此:

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

你需要实现一个setter方法

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

@如果您想从上下文中注入不同的bean,则可以使用资源。

@Resource(name="someBean")
SomeBean someBean

最新更新