这可能是一个非常基本的问题,但有NPE,所以要确保
我必须为变量使用相同的资源名称,还是在注入时可以不同?
@Resource(name='foo')
private X foo;
或者可以是
@Resource(name='foo')
private X fooxx;
我使用的是第二种情况,其中实例名称和资源名称不同,但得到了NPE
Comment是正确的,这应该有效。。。。确保类型正确,但问题可能是其他原因。根据@Resource上的Spring文档。。。
3.9.5@资源Spring还支持在字段或bean属性setter方法上使用JSR-250@Resource注释进行注入。这是JavaEE5和6中的常见模式,例如在JSF 1.2托管bean或JAX-WS2.0端点中。Spring也支持Spring托管对象的这种模式
@Resource采用name属性,默认情况下Spring将该值解释为要注入的bean名称。换句话说,它遵循名称语义,如本例所示:
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Resource(name="myMovieFinder")
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
如果没有显式指定名称,则默认名称是从字段名称或setter方法派生的。如果是字段,则采用字段名称;在setter方法的情况下,它采用bean属性名称。因此,下面的例子将把名为"movieFinder"的bean注入到它的setter方法中: