使用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