001: /*
002: * Copyright 2002-2007 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: * http://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:
017: package org.springframework.beans.factory.support;
018:
019: import org.springframework.beans.factory.BeanDefinitionStoreException;
020: import org.springframework.beans.factory.NoSuchBeanDefinitionException;
021: import org.springframework.beans.factory.config.BeanDefinition;
022:
023: /**
024: * Interface for registries that hold bean definitions, for example RootBeanDefinition
025: * and ChildBeanDefinition instances. Typically implemented by BeanFactories that
026: * internally work with the AbstractBeanDefinition hierarchy.
027: *
028: * <p>This is the only interface in Spring's bean factory packages that encapsulates
029: * <i>registration</i> of bean definitions. The standard BeanFactory interfaces
030: * only cover access to a <i>fully configured factory instance</i>.
031: *
032: * <p>Spring's bean definition readers expect to work on an implementation of this
033: * interface. Known implementors within the Spring core are DefaultListableBeanFactory
034: * and GenericApplicationContext.
035: *
036: * @author Juergen Hoeller
037: * @since 26.11.2003
038: * @see org.springframework.beans.factory.config.BeanDefinition
039: * @see AbstractBeanDefinition
040: * @see RootBeanDefinition
041: * @see ChildBeanDefinition
042: * @see DefaultListableBeanFactory
043: * @see org.springframework.context.support.GenericApplicationContext
044: * @see org.springframework.beans.factory.xml.XmlBeanDefinitionReader
045: * @see PropertiesBeanDefinitionReader
046: */
047: public interface BeanDefinitionRegistry {
048:
049: /**
050: * Register a new bean definition with this registry.
051: * Must support RootBeanDefinition and ChildBeanDefinition.
052: * @param beanName the name of the bean instance to register
053: * @param beanDefinition definition of the bean instance to register
054: * @throws BeanDefinitionStoreException if the BeanDefinition is invalid
055: * or if there is already a BeanDefinition for the specified bean name
056: * (and we are not allowed to override it)
057: * @see RootBeanDefinition
058: * @see ChildBeanDefinition
059: */
060: void registerBeanDefinition(String beanName,
061: BeanDefinition beanDefinition)
062: throws BeanDefinitionStoreException;
063:
064: /**
065: * Remove the BeanDefinition for the given name.
066: * @param beanName the name of the bean instance to register
067: * @throws NoSuchBeanDefinitionException if there is no such bean definition
068: */
069: void removeBeanDefinition(String beanName)
070: throws NoSuchBeanDefinitionException;
071:
072: /**
073: * Return the BeanDefinition for the given bean name.
074: * @param beanName name of the bean to find a definition for
075: * @return the BeanDefinition for the given name (never <code>null</code>)
076: * @throws NoSuchBeanDefinitionException if there is no such bean definition
077: */
078: BeanDefinition getBeanDefinition(String beanName)
079: throws NoSuchBeanDefinitionException;
080:
081: /**
082: * Check if this registry contains a bean definition with the given name.
083: * @param beanName the name of the bean to look for
084: * @return if this registry contains a bean definition with the given name
085: */
086: boolean containsBeanDefinition(String beanName);
087:
088: /**
089: * Return the names of all beans defined in this registry.
090: * @return the names of all beans defined in this registry,
091: * or an empty array if none defined
092: */
093: String[] getBeanDefinitionNames();
094:
095: /**
096: * Return the number of beans defined in the registry.
097: * @return the number of beans defined in the registry
098: */
099: int getBeanDefinitionCount();
100:
101: /**
102: * Given a bean name, create an alias. We typically use this method to
103: * support names that are illegal within XML ids (used for bean names).
104: * @param beanName the canonical name of the bean
105: * @param alias the alias to be registered for the bean
106: * @throws BeanDefinitionStoreException if the alias is already in use
107: */
108: void registerAlias(String beanName, String alias)
109: throws BeanDefinitionStoreException;
110:
111: /**
112: * Return the aliases for the given bean name, if defined.
113: * @param beanName the bean name to check for aliases
114: * @return the aliases, or an empty array if none
115: */
116: String[] getAliases(String beanName);
117:
118: /**
119: * Determine whether the given bean name is already in use within this registry,
120: * i.e. whether there is a local bean or alias registered under this name.
121: * @param beanName the name to check
122: * @return whether the given bean name is already in use
123: */
124: boolean isBeanNameInUse(String beanName);
125:
126: }
|