在这种情况下使用@Autowire是指示Spring容器通过使用名称与RootResource中的属性名称匹配的bean来将依赖关系注入RootResource。
这与使用XML配置的bean元素的autowire属性类似。假设RootResource有
@Singleton
@Controller
@Autowire(mode = AutowireMode.BY_NAME)
@Path("/")
public class RootResource{
private SomeService someService;
private AnotherService anotherService;
public void setSomeService(SomeService someService){
this.someService = someService;
}
public void setAnotherService(AnotherService anotherService){
this.anotherService = anotherService;
}
}
容器将尝试查找名为someService和anotherService的bean,并尝试设置相应的属性。请注意,您不需要依赖注入属性或字段级别的注释。
您可以使用@Resource/@Autowired来实现同样的目的。但是在这种情况下,您必须注释字段或设置者。并且还如果依赖未在容器发现注射将失败
@Singleton @Controller @Autowire(模式= AutowireMode.BY_NAME) @Path( “/”) 公共类RootResource {
private SomeService someService;
private AnotherService anotherService;
@Resource
public void setSomeService(SomeService someService){
this.someService = someService;
}
@Resource
public void setAnotherService(AnotherService anotherService){
this.anotherService = anotherService;
}
}
@Resource将使用bean的名称和回落到类型匹配,同时@Autowired总是使用类型匹配
还要注意的是@Autowire和@Autowired有不同的行为。 RootResource bean不需要在应用程序上下文中明确配置。它将由组件扫描仪自动检测,因为它具有原型注释,即@Controoler