我正在尝试找出实例化java对象的位置。我有一个Spring控制器,在控制器中是一个dataService
字段:
@SuppressWarnings("restriction")
@Controller
public class DataController {
/**
* Service for which to delegate retrieval of data
*/
@Resource
private DataService dataService;
(DataService
是一个接口。实现此服务的类是DataServiceImpl
)。
根据我的理解,当字段上方有@Resource时,它表示该对象是使用通常在xml文件中定义的spring bean实例化的。但是,我在我的工作区搜索了这个对象的名称(以及许多变种),并查看了项目中所有常见的spring bean位置,但我无法在任何地方找到任何提及。有谁知道这里会发生什么?
答案 0 :(得分:1)
从spring框架文档中,
@Resource采用name属性,默认情况下Spring解释 该值作为要注入的bean名称。如果未明确指定名称,则默认名称是从字段名称或setter方法派生的。如果是字段,则采用字段名称;在setter方法的情况下,它采用bean属性名称
如果没有提供name属性,那么spring会回退到autowiring,它将搜索并注入匹配类型的bean。因此DataServiceImpl
可以在spring bean xml文件中定义或使用@Component
注释。
在@Resource用法的唯一情况下,没有明确的名称 指定,与@Autowired类似,@ Resource搜索主要类型 匹配而不是特定的命名bean并解析众所周知 可解析的依赖关系。