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}