使用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。我错过了一个明显的解决方案吗?
答案 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