001/* 002 * Copyright 2002-2013 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * https://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.springframework.beans.factory.support; 018 019import org.springframework.beans.factory.BeanDefinitionStoreException; 020import org.springframework.core.io.Resource; 021import org.springframework.core.io.ResourceLoader; 022 023/** 024 * Simple interface for bean definition readers. 025 * Specifies load methods with Resource and String location parameters. 026 * 027 * <p>Concrete bean definition readers can of course add additional 028 * load and register methods for bean definitions, specific to 029 * their bean definition format. 030 * 031 * <p>Note that a bean definition reader does not have to implement 032 * this interface. It only serves as suggestion for bean definition 033 * readers that want to follow standard naming conventions. 034 * 035 * @author Juergen Hoeller 036 * @since 1.1 037 * @see org.springframework.core.io.Resource 038 */ 039public interface BeanDefinitionReader { 040 041 /** 042 * Return the bean factory to register the bean definitions with. 043 * <p>The factory is exposed through the BeanDefinitionRegistry interface, 044 * encapsulating the methods that are relevant for bean definition handling. 045 */ 046 BeanDefinitionRegistry getRegistry(); 047 048 /** 049 * Return the resource loader to use for resource locations. 050 * Can be checked for the <b>ResourcePatternResolver</b> interface and cast 051 * accordingly, for loading multiple resources for a given resource pattern. 052 * <p>Null suggests that absolute resource loading is not available 053 * for this bean definition reader. 054 * <p>This is mainly meant to be used for importing further resources 055 * from within a bean definition resource, for example via the "import" 056 * tag in XML bean definitions. It is recommended, however, to apply 057 * such imports relative to the defining resource; only explicit full 058 * resource locations will trigger absolute resource loading. 059 * <p>There is also a {@code loadBeanDefinitions(String)} method available, 060 * for loading bean definitions from a resource location (or location pattern). 061 * This is a convenience to avoid explicit ResourceLoader handling. 062 * @see #loadBeanDefinitions(String) 063 * @see org.springframework.core.io.support.ResourcePatternResolver 064 */ 065 ResourceLoader getResourceLoader(); 066 067 /** 068 * Return the class loader to use for bean classes. 069 * <p>{@code null} suggests to not load bean classes eagerly 070 * but rather to just register bean definitions with class names, 071 * with the corresponding Classes to be resolved later (or never). 072 */ 073 ClassLoader getBeanClassLoader(); 074 075 /** 076 * Return the BeanNameGenerator to use for anonymous beans 077 * (without explicit bean name specified). 078 */ 079 BeanNameGenerator getBeanNameGenerator(); 080 081 082 /** 083 * Load bean definitions from the specified resource. 084 * @param resource the resource descriptor 085 * @return the number of bean definitions found 086 * @throws BeanDefinitionStoreException in case of loading or parsing errors 087 */ 088 int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException; 089 090 /** 091 * Load bean definitions from the specified resources. 092 * @param resources the resource descriptors 093 * @return the number of bean definitions found 094 * @throws BeanDefinitionStoreException in case of loading or parsing errors 095 */ 096 int loadBeanDefinitions(Resource... resources) throws BeanDefinitionStoreException; 097 098 /** 099 * Load bean definitions from the specified resource location. 100 * <p>The location can also be a location pattern, provided that the 101 * ResourceLoader of this bean definition reader is a ResourcePatternResolver. 102 * @param location the resource location, to be loaded with the ResourceLoader 103 * (or ResourcePatternResolver) of this bean definition reader 104 * @return the number of bean definitions found 105 * @throws BeanDefinitionStoreException in case of loading or parsing errors 106 * @see #getResourceLoader() 107 * @see #loadBeanDefinitions(org.springframework.core.io.Resource) 108 * @see #loadBeanDefinitions(org.springframework.core.io.Resource[]) 109 */ 110 int loadBeanDefinitions(String location) throws BeanDefinitionStoreException; 111 112 /** 113 * Load bean definitions from the specified resource locations. 114 * @param locations the resource locations, to be loaded with the ResourceLoader 115 * (or ResourcePatternResolver) of this bean definition reader 116 * @return the number of bean definitions found 117 * @throws BeanDefinitionStoreException in case of loading or parsing errors 118 */ 119 int loadBeanDefinitions(String... locations) throws BeanDefinitionStoreException; 120 121}